From: Robert Klemme Date: 2008-03-11T02:41:55+09:00 Subject: Re: Sort hashes using values 2008/3/10, Rodrigo Bermejo : > Subbu wrote: > > Ruby automatically sorts hashes by keys, which means: > > > >>> h = {"first"=>2,"second"=>1,"third"=>3} > > => {"third"=>3, "second"=>1, "first"=>2} > > > > How do I sort this by the values? So that I have: > > {"second"=>1, "first"=>2, "third"=>3} > > > -------------> http://www.ruby-doc.org/core/classes/Hash.html > hsh.sort => array > hsh.sort {| a, b | block } => array > > Converts hsh to a nested array of [ key, value ] arrays and sorts it, > using Array#sort. > > h = { "a" => 20, "b" => 30, "c" => 10 } > h.sort #=> [["a", 20], ["b", 30], ["c", 10]] > h.sort {|a,b| a[1]<=>b[1]} #=> [["c", 10], ["a", 20], ["b", 30]] and with #sort_by irb(main):001:0> {"first"=>2,"second"=>1,"third"=>3}.sort_by {|k,v| v} => [["second", 1], ["first", 2], ["third", 3]] Kind regards robert -- use.inject do |as, often| as.you_can - without end