我有一个哈希:
hash = {"key1" => [1, a], "key2" => [3, c], "key3" => [2, b]}
我需要通过值的第二个元素对哈希进行排序,如下所示:
hash = {"key1" => [1, a], "key3" => [2, b], "key2" => [3, c]}
我怎么能这样做?
答案 0 :(得分:2)
试试这个
hash.sort_by { |_k, v| v.last }.to_h
答案 1 :(得分:2)
首先要注意的是,从Ruby 1.9开始,Ruby哈希实际上是有序的(docs)。
要回答您的问题,您可以使用Enumerable#sort_by
,如下所示:
hash.sort_by{ |k, v| v[1] }.to_h
这由每个值数组的第二个成员排序,并将其作为对数组返回。然后它将该对数组转换回哈希(使用to_h
)