3

私はこのようなハッシュを持っています

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

上位3色をハッシュ値の順に並べ替えて表示したい

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

sort_by { |x,y| h[x] <=> h[y] }やのようなことをしようとしましたmax_by { |x,y| h[x] }が、 しか得られません["black"]。上位 3 つのオカレンスを取得するにはどうすればよいですか?

4

3 に答える 3

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"]
于 2012-08-22T04:15:09.230 に答える
3

これを行う1つの方法を次に示します。

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)
于 2012-08-22T04:13:18.600 に答える
2

これでいけそうです。

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

なぞなぞ

上位3つが必要な場合は、最初の3つをスライスしてください.

firstThreeColours = sortedColours[0,3]
于 2012-08-22T04:08:34.183 に答える