0bs*_*r07 5 ruby arrays sorting hash hashmap
我有一个ids和他们的分数哈希,它是这样的:
@objects = {1=>57, 4=>12, 3=>9, 5=>3, 55=>47, 32=>39, 17=>27, 29=>97, 39=>58}
Run Code Online (Sandbox Code Playgroud)
如何挑选前五名并放弃其余的?
我这样做:
@orderedObject = @objects.sort_by {|k,v| v}.reverse
=>[[29, 97], [39, 58], [1, 57], [55, 47], [32, 39], [17, 27], [4, 12], [3, 9], [5, 3]]
Run Code Online (Sandbox Code Playgroud)
然后我这样做:只有以下的键@orderedObjects:
@keys = @orderedObject.map { |key, value| key }
Run Code Online (Sandbox Code Playgroud)
这给了我:
=>[29, 39, 1, 55, 32, 17, 4, 3, 5]
Run Code Online (Sandbox Code Playgroud)
所有我需要的是[29, 39, 1, 55, 32]第5项指标.但是我被困住了,我不知道该怎么做.
你可以做
@objects = {1=>57, 4=>12, 3=>9, 5=>3, 55=>47, 32=>39, 17=>27, 29=>97, 39=>58}
@objects.sort_by { |_, v| -v }[0..4].map(&:first)
# => [29, 39, 1, 55, 32]
@objects.sort_by { |_, v| -v }.first(5).map(&:first)
# => [29, 39, 1, 55, 32]
Run Code Online (Sandbox Code Playgroud)