Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: How to get rid of dupes from an array of hashes

by injunjoel (Priest)
on Jun 30, 2005 at 23:45 UTC ( [id://471515]=note: print w/replies, xml ) Need Help??


in reply to How to get rid of dupes from an array of hashes

Greetings all,
This works for a small array. Im not sure how well it will scale for 4000 elements, hopefully you have enough memory for it.
#!/usr/bin/perl -w use strict; my @array = ( { a => 1, b => 2, c => 3}, { a => 1, b => 2, c => 3}, { a => 1, b => 2, c => 3}, { a => 2, b => 2, c => 3}, { a => 2, b => 1, c => 3} ); my @unique = do{ my %seen = map{join(":", values %{$_}), $_} @array; values %seen; }; foreach(@array){ foreach my $key(sort keys %{$_}){ print "$key => $_->{$key}:"; } print "\n"; } print "\nunique\n"; foreach(@unique){ foreach my $key(sort keys %{$_}){ print "$key => $_->{$key}:"; } print "\n"; }
output
a => 1:b => 2:c => 3: a => 1:b => 2:c => 3: a => 1:b => 2:c => 3: a => 2:b => 2:c => 3: a => 2:b => 1:c => 3: unique a => 2:b => 2:c => 3: a => 1:b => 2:c => 3: a => 2:b => 1:c => 3:

This code assumes that the hashes have the same keys just different values. If this is not the case change the line
my %seen = map{join(":", values %{$_}), $_} @array;
to
my %seen = map{join(":", keys %{$_}), $_} @array;


-InjunJoel
"I do not feel obliged to believe that the same God who endowed us with sense, reason and intellect has intended us to forego their use." -Galileo

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://471515]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (4)
As of 2024-03-29 05:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found