按值降序和键升序对哈希进行排序,使用Ruby。

5
我有一个像这样的哈希表:
 trial_hash ={"key1"=>1000, "key2"=>34, "key3"=>500, "key4"=>500, "key5"=>500, "key6"=>500}

I order it in descending order of the value:

 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个回答

9

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

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

太酷了,谢谢!我之前试过这个代码:trial_hash.sort_by{|k, v| [v,-Integer(k)]}.reverse,但是由于键不是字符串类型,所以无法工作。我把键改成了1而不是key1,然后就可以使用了。但是你的新代码真的很棒。 - inquisitive

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接