note
huck
<p>Now knowing more about the problem i might try
<c>
use strict; use warnings;
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 %found;
my @unique;
for my $grp (@test_data) {
my $t1=$grp->{Tag1}//'';
my $t2=$grp->{Tag2}//'';
next if ($found{$t1}{$t2});
push @unique,$grp;
$found{$t1}{$t2}=1;
}
print Dumper \@unique;
</c>
as it saves the cost of serializing and the cost of repeated storage of the characters Tag1/Tag2 at the expense of only checking the two keys AND representing the undefined key value as a zero length character scalar.
</p>
<p><c>
$VAR1 = [
{
'Tag1' => '1',
'Tag2' => 'a'
},
{
'Tag2' => 'b',
'Tag1' => '1'
},
{
'Tag1' => '1',
'Tag2' => 'c'
},
{
'Tag1' => '2',
'Tag2' => 'a'
},
{
'Tag2' => 'd',
'Tag1' => '2'
},
{
'Tag1' => '3'
},
{
'Tag1' => 'sun',
'Tag2' => 'a'
}
];
</c></p>
11107249
11107253