my @allvalues; for my $i ( 0 .. $#AoH ) { push ( @allvalues, $AoH[$i]{ page } ); }
In general, building up an array by pushing in a loop can usually be done more elegantly with map/grep:
my @allvalues = map $_->{page}, @AoH;
However, if the only purpose for this array is to locate the duplicates for deletion, you don't really need this array or the duplicates array:
# count occurrences of each value my %count; ++$count{$_->{page}} for @AoH; # keep only those copies that aren't duplicated @AoH = grep $count{$_->{page}} == 1, @AoH;
That is:
# replace @AoH with @AoH = # only grep # the hashrefs whose 'page' value appears exactly once $count{$_->{page}} == 1, # of the current @AoH @AoH;
Hugo
In reply to Re: Is there better way to delete dups in an AoH?
by hv
in thread Is there better way to delete dups in an AoH?
by bradcathey
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |