#!/usr/bin/perl -w use strict; use Data::Dumper; my @array = ( { a => 1, b => 2, c => 3}, { b => 1, d => 2, c => 3}, { a => 1, b => 2, c => 3}, { a => 2, b => 2, c => 3}, { a => 2, b => 1, c => 3}, ); my %count; my @unique; # eats away at @array, use for() if you want to keep it while (my $entry = shift @array) { # need to sort by something because an equivalent hash migh # return the key/value pairs in a different order my @sorted = map { $_, $entry->{$_} } sort keys %$entry; # create a unique string and see if we've seen it before next if $count{ join"#",@sorted }++; push @unique,$entry; } print Dumper(\@unique);
I'm not so sure how efficient this is with your data, though. Try it out. :-)
by the way: if your hashes are really the same objects (i.e. references to the same structure) you can just compare the stringified reference (ie. $href eq $href2). But considering your question, you're probably not in that situation.
In reply to Re: How to get rid of dupes from an array of hashes
by Joost
in thread How to get rid of dupes from an array of hashes
by bravenmd
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |