繁体   English   中英

从散列值排序的哈希中获取键数组

[英]Getting an array of keys from a hash ordered by the hash's values

我有一个像这样的哈希

{"red" => 3, "blue" => 1, "yellow" => 3, "green" => 1, "black" => 4}

我想按照散列值的顺序排序并显示前三种颜色,即

["black", "red", "yellow"]

我试着做一些像sort_by { |x,y| h[x] <=> h[y] } sort_by { |x,y| h[x] <=> h[y] }max_by { |x,y| h[x] } max_by { |x,y| h[x] } ,但我只得到["black"] 你如何获得前三名?

作为变体:

h = {"green"=>1, "red"=>3, "yellow"=>3, "blue"=>1, "black"=>4}
h.sort_by{ |color, n| -n }.map(&:first).take(3) #=> ["black", "red", "yellow"]

这是一种方法。

colors = {"red"=>3, "blue"=>1, "yellow"=>3, "green"=>1, "black"=>4}
colors.sort { |a, b| b[1] <=> a[1] }.map { |a| a[0] }.take(3)

这似乎是这样做的。

sortedColours = colours.keys
 .sort {|keyA, keyB| colours[keyB] - colours[keyA] }

谜语

如果你想要前三名,只需切掉前三名。

firstThreeColours = sortedColours[0,3]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM