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

inq*_*ive 5 ruby sorting hash

我有这样的哈希

 trial_hash ={"key1"=>1000, "key2"=>34, "key3"=>500, "key4"=>500, "key5"=>500, "key6"=>500}
Run Code Online (Sandbox Code Playgroud)

我按照值的降序排序:

 my_hash = trial_hash.sort_by{|k, v| v}.reverse
Run Code Online (Sandbox Code Playgroud)

我现在这样做了:

 [["key1", 1000], ["key4", 500], ["key5", 500], ["key6", 500], ["key3", 500], ["key2", 34]]
Run Code Online (Sandbox Code Playgroud)

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

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

 [["key1", 1000], ["key3", 500], ["key4", 500], ["key5", 500], ["key6", 500], ["key2", 34]]
Run Code Online (Sandbox Code Playgroud)

use*_*234 8

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

>> trial_hash.sort_by{|k, v| [-v, k]}
=> [["key1", 1000], ["key3", 500], ["key4", 500], ["key5", 500], ["key6", 500], ["key2", 34]]
Run Code Online (Sandbox Code Playgroud)