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