Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

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

by injunjoel (Priest)
on Jun 30, 2005 at 23:45 UTC ( #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
Node Status?
node history
Node Type: note [id://471515]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (3)
As of 2019-07-21 02:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    If you were the first to set foot on the Moon, what would be your epigram?






    Results (7 votes). Check out past polls.

    Notices?