use strict;
use warnings;
use Data::Dumper;
my @test_data = (
{ a=>1, b=>2 },
{ ab => 12}
);
my %unique = map { my @k=sort(keys %$_);
join("",@k, @$_{@k})
=> $_ }
@test_data;
print Dumper [values %unique];
$VAR1 = [
{
'ab' => 12
}
];
updates
- replacing "" in join($; ,@k, @$_{@k}) solves this issue *
- please note that other solutions kept the order
*) in most cases
| [reply] [Watch: Dir/Any] [d/l] [select] |
OK - more robust version:
use strict;
use warnings;
use Digest::MD5;
use Data::Dumper;
my @test_data = (
{ Tag1 => "1", Tag2 => "a" },
{ Tag1 => "1", Tag2 => "a" },
{ Tag1 => "1", Tag2 => "b" },
{ Tag1 => "1", Tag2 => "c" },
{ Tag1 => "1", Tag2 => "a" },
{ Tag1 => "2", Tag2 => "a" },
{ Tag1 => "2", Tag2 => "d" },
{ Tag1 => "2", Tag2 => "a" },
{ Tag1 => "3"},
{ Tag1 => "sun", Tag2 => "a" },
{ Tag1 => "sun", Tag2 => "a" },
);
my @test2=(
{ a=>1, b=>2 },
{ ab => 12}
);
# for performance, MD5 is fastest.
my %unique = map {my @k=sort(keys %$_);
my $ctx=Digest::MD5->new() or die "Cannot make MD5 o
+bj";
$ctx->add($_ . $;) for @k;
$ctx->add("=>"); #separator for values
$ctx->add($_ . "+") for @$_{@k};
$ctx->digest() => $_ }
@test_data;
print Dumper [values %unique];
%unique = map {my @k=sort(keys %$_);
my $ctx=Digest::MD5->new() or die "Cannot make MD5 ob
+j";
$ctx->add($_ . $;) for @k;
$ctx->add("=>"); #separator for values
$ctx->add($_ . "+") for @$_{@k};
$ctx->digest() => $_ }
@test2;
print Dumper [values %unique];
"From there to here, from here to there, funny things are everywhere." -- Dr. Seuss
| [reply] [Watch: Dir/Any] [d/l] |