RubyでHashのsortの返り値をHashにする
RubyのHashのsortは返り値がArrayになっています。
hash = { a: 30, b: 66, c: 45, d: 100, e: 80 } p hash.sort_by{|k,v| v }
[[:a, 30], [:c, 45], [:b, 66], [:e, 80], [:d, 100]]
ArrayではなくHashで受け取りたい場合は、この値をそのままHashに入れてあげれば大丈夫です。
hash = { a: 30, b: 66, c: 45, d: 100, e: 80 } result = hash.sort_by{|k,v| v } p result sorted_hash = Hash[result] p sorted_hash
[[:a, 30], [:c, 45], [:b, 66], [:e, 80], [:d, 100]] {:a=>30, :c=>45, :b=>66, :e=>80, :d=>100}
追記 ( 2014/1/10 )
Ruby2.1からはArrayに対してto_hが使用できるようになったので、上記のようにHashに渡すのではなくto_hでハッシュに戻すことが出来るようになりました。
hash = { a: 30, b: 66, c: 45, d: 100, e: 80 } p hash.sort_by{|k,v| v }.to_h
{:a=>30, :c=>45, :b=>66, :e=>80, :d=>100}