按降序按值对哈希值进行排序,然后按升序顺序键入ruby

时间:2015-05-21 21:48:36

标签: ruby sorting hash

我有这样的哈希

 trial_hash ={"key1"=>1000, "key2"=>34, "key3"=>500, "key4"=>500, "key5"=>500, "key6"=>500}

我按照值的降序排序:

 my_hash = trial_hash.sort_by{|k, v| v}.reverse

我现在这样做了:

 [["key1", 1000], ["key4", 500], ["key5", 500], ["key6", 500], ["key3", 500], ["key2", 34]]

但我希望它在值相同时按键的升序排序。我该怎么做?

例如:上面的哈希将以这种方式排序:

 [["key1", 1000], ["key3", 500], ["key4", 500], ["key5", 500], ["key6", 500], ["key2", 34]]

1 个答案:

答案 0 :(得分:8)

在比较中,数组首先通过它们的第一个元素进行评估,然后通过它们的第二个元素等进行评估。您可以使用此事实来枚举顺序比较。比较[-v, k]首先按值排序(按相反顺序),然​​后按键进行比较。

>> trial_hash.sort_by{|k, v| [-v, k]}
=> [["key1", 1000], ["key3", 500], ["key4", 500], ["key5", 500], ["key6", 500], ["key2", 34]]