在Ruby中按哈希值降序sorting

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

按升序sorting: h.sort {|a,b| a[1]<=>b[1]} #=> [["c", 10], ["a", 20], ["b", 30]] 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 

我以3000次迭代为基础对1000个元素的哈希值进行了基准testing,得到了这些时间:

 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 
 h.sort {|a,b| b[1]<=>a[1]} 

<=>比较两个操作数,如果第一个较低则返回-1,如果相等则返回0,如果第一个较高则返回1。 这意味着你可以做-(a[1]<=>b[1])来颠倒顺序。

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