我有一个像这样的哈希
{"red" => 3, "blue" => 1, "yellow" => 3, "green" => 1, "black" => 4}
我想按照哈希值的顺序排序并显示前三种颜色,即
["black", "red", "yellow"]
我尝试执行sort_by { |x,y| h[x] <=> h[y] }
和max_by { |x,y| h[x] }
之类的操作,但我只获得了["black"]
。你如何获得前三名?
答案 0 :(得分:8)
作为变体:
h = {"green"=>1, "red"=>3, "yellow"=>3, "blue"=>1, "black"=>4}
h.sort_by{ |color, n| -n }.map(&:first).take(3) #=> ["black", "red", "yellow"]
答案 1 :(得分:3)
这是一种方法。
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)
答案 2 :(得分:2)
这似乎就是这样做的。
sortedColours = colours.keys
.sort {|keyA, keyB| colours[keyB] - colours[keyA] }
如果你想要前3名,只需切掉前3名。
firstThreeColours = sortedColours[0,3]