simanのブログ

ゆるふわプログラマー。競技プログラミングやってます。Ruby好き

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}