Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"

Answer: How do I sort a hash by its values?

by George_Sherston (Vicar)
on Jan 13, 2002 at 03:03 UTC ( #138349=categorized answer: print w/replies, xml ) Need Help??

Q&A > hashes > How do I sort a hash by its values? - Answer contributed by George_Sherston

Warning: I'm the person who asked the question!

How I'd do it is
my %hash = ( foo => 2, bar => 1, baz => 3, bun => 2, ); my @array = sort {$hash{$a} <=> $hash{$b}} keys %hash;
Of course, this array only has the hash keys in it, albeit correctly sorted. If you want a data structure with both keys *and* values from %hash then you have to choose a data structure that meets your needs. A straight hash is no good, because you have duplicate values, so you'll lose some key / value pairs when you reverse them. An array of hashes is one choice:
my @array_of_hashes; push @array_of_hashes, {key => $_, value => $hash{$_}} for @sorted;
And to see what that looks like,
use Data::Dumper; print Dumper(\@array_of_hashes);
Gets you
$VAR1 = [ { 'value' => 1, 'key' => 'bar' }, { 'value' => 2, 'key' => 'bun' }, { 'value' => 2, 'key' => 'foo' }, { 'value' => 3, 'key' => 'baz' } ];
... but I'm interested to see what other monks come up with: it was my slight unease with this solution that prompted me to post this question.

Log In?

What's my password?
Create A New User
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (4)
As of 2017-08-20 07:10 GMT
Find Nodes?
    Voting Booth?
    Who is your favorite scientist and why?

    Results (313 votes). Check out past polls.