Ruby哈希表-按值排序并打印键

3
这是我的哈希值。
=> {"f11"=>1, "f12"=>3, "f13"=>3, "f07"=>5, "f10"=>1}

我希望按照数值大小从大到小排序,然后将键值转换为一个数组。
=> ["f07", "f12", "f13", "f11", "f10"]

我猜你也想在值相同时对键进行排序? - oldergod
4个回答

6

这里有一个一行代码(我喜欢 Ruby!):

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

希望这有所帮助!

3

哈希表(Hash)中混入了可枚举模块(Enumerable module),这为我们提供了一些方法,如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]]

3
更加简短!:
h.keys.sort_by{|a| h[a]}.reverse

1
a = {"f11"=>1, "f12"=>3, "f13"=>3, "f07"=>5, "f10"=>1}
b = Hash[a.sort_by{|k,v| v}]
puts b.keys.reverse

谢谢。我如何将键放入数组中? - San Backups
调用哈希表的键会返回一个键数组,因此在这种情况下,b.keys返回一个数组本身,该数组被反转,因为您想按降序排序值。 - saihgala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接