3

这是我的哈希。

=> {"f11"=>1, "f12"=>3, "f13"=>3, "f07"=>5, "f10"=>1}

我想按从最大到最小的值进行排序,然后从键中创建一个数组。

=> ["f07", "f12", "f13", "f11", "f10"]
4

4 回答 4

6

这是给你的单线(我喜欢红宝石!):

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

希望有帮助!

于 2012-09-10T04:39:25.470 回答
3

Hash 混合了 Enumerable 模块,为我们提供了 sort 和 sort_by 等方法。在这种情况下,我们可以使用 sort_by 来按值的顺序获取集合。

 h={"f11"=>1, "f12"=>3, "f13"=>3, "f07"=>5, "f10"=>1} 
 h.sort_by{ |key, value| -value }  
 => [["f07", 5], ["f12", 3], ["f13", 3], ["f11", 1], ["f10", 1]]
于 2012-09-10T04:57:40.423 回答
3

更短!:

h.keys.sort_by{|a| h[a]}.reverse
于 2012-09-10T04:58:57.163 回答
1
a = {"f11"=>1, "f12"=>3, "f13"=>3, "f07"=>5, "f10"=>1}
b = Hash[a.sort_by{|k,v| v}]
puts b.keys.reverse
于 2012-09-10T04:38:59.597 回答