Ruby 按键的升序对具有重复值的哈希进行排序

Ruby 按键的升序对具有重复值的哈希进行排序,ruby,hash,Ruby,Hash,我有一个如下所示的散列: {"P1"=>108, "P6"=>50, "P3"=>50, "P5"=>40, "P2"=>40, "P4"=>40} 这已按值的降序排序 我想要下面的输出,其中保持原始顺序(按值降序),但具有相同值的元素按键的升序排序(例如,P3位于P6之前) 任何以简单方式处理此问题的指针都会很有帮助。对于排序的多个条件,请使用数组 {"P1"=>108, "P6"=>50, "P3"=>50, "P5"=>40,

我有一个如下所示的散列:

{"P1"=>108, "P6"=>50, "P3"=>50, "P5"=>40, "P2"=>40, "P4"=>40}
这已按值的降序排序

我想要下面的输出,其中保持原始顺序(按值降序),但具有相同值的元素按键的升序排序(例如,
P3
位于
P6
之前)


任何以简单方式处理此问题的指针都会很有帮助。

对于排序的多个条件,请使用数组

{"P1"=>108, "P6"=>50, "P3"=>50, "P5"=>40, "P2"=>40, "P4"=>40}
.sort_by{|k, v| [-v, k]}.to_h

@萨瓦:谢谢你的回答。您是否可以更详细地解释一下您的方法,尤其是
[-v,k]
部分,或者如果您能给我指出一些解释相同的示例文章,即使这样也会有所帮助。我看了文档,但没什么帮助。每个类都有自己的
定义,用于排序。对于数组,它的元素与第一个元素进行比较。如果他们不是平手,那么这将是比较的结果。如果存在平局,则比较下一个元素。等等
-v
使用的是值是数字这一事实。通过否定一个数字,它与降序排序具有相同的效果。@sawa请原谅我的回答晚了。我从你的解释中明白,-V会考虑按哈希顺序排列哈希值,但是我不太清楚,当哈希键具有相同的值时,排序是如何工作的。在这种情况下,键值对是否按键的默认升序排序?如果是,您的代码回答的哪一部分告诉ruby这样做?。另外,出于好奇,如果我想对具有相同元素值的键值对按降序排序,但保留值的原始降序,我如何实现这一点?非常感谢。
{"P1"=>108, "P6"=>50, "P3"=>50, "P5"=>40, "P2"=>40, "P4"=>40}
.sort_by{|k, v| [-v, k]}.to_h