我的输入哈希: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 = { "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