我的输入散列: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]]
反过来说,我们如何才能让它工作呢?<=>
是什么意思?
发布于 2010-11-24 19:59:46
你可以让它一下子变得更干净,更清晰,更快!如下所示:
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
发布于 2010-11-24 14:52:51
h.sort {|a,b| b[1]<=>a[1]}
发布于 2010-11-24 14:51:56
<=>
比较两个操作数,如果第一个操作数较低,则返回-1;如果第一个操作数相等,则返回0;如果第一个操作数较高,则返回1。这意味着您可以只执行-(a[1]<=>b[1])
来颠倒顺序。
https://stackoverflow.com/questions/4264133
复制相似问题