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=>4