我的输入哈希: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]]
我们怎样才能让它以相反的方式工作,<=>
是什么?什么意思?
最佳答案
您可以同时让它更干净、更清晰、更快!像这样:
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
关于ruby - 按 Ruby 中哈希的值降序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4264133/