想要先按值排序红宝石中的哈希值,然后按键秒排序

时间:2011-06-10 16:03:41

标签: ruby-on-rails ruby

  

可能重复:
  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}

1 个答案:

答案 0 :(得分:6)

Array有一个很酷的功能:使用<=>方法比较两个数组将逐个元素地比较它们。您可以利用它进行多值排序:

sorted_hash = Hash[original_hash.sort_by { |k,v| [-1 * v, -1 * k] }]

更新:也许你已经知道了,但我以为你正在使用Ruby 1.9。在早期版本中,Hashes不保证维持其顺序。