按值排序哈希然后按键排序(但键是相反的)
标题说明了一切。
total = {"Bob"=>37, "Alice"=>42, "Carl"=>42}
我想按值排序,然后按键排序,但按键降序排序。
像这样:
{"Bob"=>37, "Carl"=>42, "Alice"=>42}
我试过了:
return total.sort_by { |k, v| [v, k] }
但是从这里我不知道如何扭转k
…
使用排序 :
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
),因为我们需要它同时将它放入数组中。
编辑:@ Mirror318,看起来很可怕,看看这里的优秀解释: 什么是Ruby <=>(太空船)运营商?
其他方式:
total.sort_by { |k,v| [-v,k] }.reverse #=> [["Bob", 37], ["Carl", 42], ["Alice", 42]]
如果你正在使用ruby> = 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