当值为数组

时间:2017-10-16 20:17:41

标签: arrays ruby sorting hash

我有一个哈希:

hash = {"key1" => [1, a], "key2" => [3, c], "key3" => [2, b]}

我需要通过值的第二个元素对哈希进行排序,如下所示:

hash = {"key1" => [1, a], "key3" => [2, b], "key2" => [3, c]}

我怎么能这样做?

2 个答案:

答案 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