下降按Ruby中的Hash值排序

时间:2010-11-24 06:46:59

标签: ruby sorting hash

我的输入哈希:h = { "a" => 20, "b" => 30, "c" => 10 }

升序排序:h.sort {|a,b| a[1]<=>b[1]} #=> [["c", 10], ["a", 20], ["b", 30]]

但是,我需要[["b", 30], ["a", 20], ["c", 10]]

我们怎样才能让它以相反的方式发挥作用,<=>是什么意思?

4 个答案:

答案 0 :(得分:170)

你可以让它更干净,更清晰,更快速!像这样:

h.sort_by {|k,v| v}.reverse

我使用随机值对1000个元素哈希进行3000次迭代的基准测试,并得到以下时间:

h.sort {|x,y| -(x[1]<=>y[1])} -- 16.7s
h.sort {|x,y| y[1] <=> x[1]} -- 12.3s
h.sort_by {|k,v| -v} -- 5.9s
h.sort_by {|k,v| v}.reverse -- 3.7

答案 1 :(得分:11)

h.sort {|a,b| b[1]<=>a[1]}

答案 2 :(得分:9)

<=>比较两个操作数,如果第一个较低则返回-1,如果它们相等则返回0,如果第一个较高则返回1。这意味着您只需执行-(a[1]<=>b[1])即可撤销订单。

答案 3 :(得分:7)

超级简单:h.sort_by { |k, v| -v }