标题说明了一切。
total = {"Bob"=>37, "Alice"=>42, "Carl"=>42}
我希望按值排序,然后按键排序,但按键降序排序。
像这样:
{"Bob"=>37, "Carl"=>42, "Alice"=>42}
我试过了:
return total.sort_by { |k, v| [v, k] }
但是从这里我不知道如何扭转k
......
答案 0 :(得分:5)
使用sort:
total = {"Bob"=>37, "Alice"=>42, "Carl"=>42}
total.sort { |(k1, v1), (k2, v2)| [v1, k2] <=> [v2, k1] }.to_h
# => {"Bob"=>37, "Carl"=>42, "Alice"=>42}
首先,按值(v1 <=> v2
)排序,然后按键反向排序(k2 <=> k1
),因为我们需要它同时将它放入数组中。
答案 1 :(得分:2)
另一种方式:
total.sort_by { |k,v| [-v,k] }.reverse
#=> [["Bob", 37], ["Carl", 42], ["Alice", 42]]
答案 2 :(得分:-1)
如果您使用的是ruby&gt; = 2.1,那么只需在排序的元组数组上调用to_h
:
total = {"Bob"=>37, "Alice"=>42, "Carl"=>42}
total.sort_by{|k, v| [v, k]}.to_h
否则请致电Hash.new
:
total = {"Bob"=>37, "Alice"=>42, "Carl"=>42}
Hash.new total.sort_by{|k, v| [v, k]}.to_h