我有这样的哈希
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]]
答案 0 :(得分:8)
在比较中,数组首先通过它们的第一个元素进行评估,然后通过它们的第二个元素等进行评估。您可以使用此事实来枚举顺序比较。比较[-v, k]
首先按值排序(按相反顺序),然后按键进行比较。
>> trial_hash.sort_by{|k, v| [-v, k]}
=> [["key1", 1000], ["key3", 500], ["key4", 500], ["key5", 500], ["key6", 500], ["key2", 34]]