Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

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
Discipulus has some problem with vowels.. sry
shmem is an "instant asshole - just add alcohol" :-P
[james28909]: you guys/gals are awesome. thanks for the wisdom.

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (2)
As of 2018-05-20 16:07 GMT
Find Nodes?
    Voting Booth?