可能重复:
Sorting a hash in Ruby by its value first then its key.
我需要订购一个哈希,以便该值是第一优先级,然后当值相同时,它按键排序。
我目前正在使用此代码进行排序,但我没有看到如何使用第二个元素进行sort_by。
Hash[@card_value_counts.sort_by{|k, v| k * -1}]
我正在寻找的例子是:
pre_sorted = {10=>1, 9=>2, 3=>2, 2=>1, 1=>1}
sorted = {9=>2, 3=>2, 10=>1, 2=>1, 1=>1}
pre_sorted = {12=>2, 10=>3, 9=>4, 5=>3}
sorted = {9=>4, 10=>3, 5=>3, 12=>2}
答案 0 :(得分:6)
Array有一个很酷的功能:使用<=>
方法比较两个数组将逐个元素地比较它们。您可以利用它进行多值排序:
sorted_hash = Hash[original_hash.sort_by { |k,v| [-1 * v, -1 * k] }]
更新:也许你已经知道了,但我以为你正在使用Ruby 1.9。在早期版本中,Hashes不保证维持其顺序。