Ruby 排序并获取哈希的前五个值

Ruby 排序并获取哈希的前五个值,ruby,Ruby,我有一个散列,其键是唯一的,但值相似。我正在尝试检索前五个最高值的对。例如,从以下方面: {9=>1, 11=>1, 12=>2, 13=>1, 14=>1, 18=>1, 19=>1, 20=>1, 23=>1, 24=>2, 27=>1, 28=>1, 29=>1, 30=>1, 33=>1, 34=>1, 35=>1, 36=>1, 37=>1, 38=>1, 39=&g

我有一个散列,其键是唯一的,但值相似。我正在尝试检索前五个最高值的对。例如,从以下方面:

{9=>1, 11=>1, 12=>2, 13=>1, 14=>1, 18=>1, 19=>1, 20=>1, 23=>1, 24=>2, 27=>1, 28=>1, 29=>1, 30=>1, 33=>1, 34=>1, 35=>1, 36=>1, 37=>1, 38=>1, 39=>1, 40=>1, 41=>1, 42=>1, 43=>1, 44=>1, 45=>1, 46=>1, 47=>1, 48=>1, 49=>1, 52=>1, 53=>1, 54=>1, 55=>1, 56=>1, 57=>1, 58=>1, 59=>1, 60=>1, 61=>1, 62=>1, 63=>1, 64=>1, 66=>1, 67=>1, 68=>1, 69=>1, 70=>2, 72=>1}
我想先看看这些值

=> 12=>2, 24=>2, 70=>2, ???
我不知道该怎么做,因为有三个实例的值是
2
。如果下一个值都相同,ruby将如何决定它们是什么

我有这个解决方案

@common_locations.max { |a,b| a.last() <=> b.last() }
@common_locations.max{a,b|a.last()b.last()}
但这只给了我一个例子。我如何收集五个呢?

这样可以:

hash = {9=>1, 11=>1, 12=>2, 13=>1, 14=>1, 18=>1, 19=>1, 20=>1, 23=>1, 24=>2, 27=>1, 28=>1, 29=>1, 30=>1, 33=>1, 34=>1, 35=>1, 36=>1, 37=>1, 38=>1, 39=>1, 40=>1, 41=>1, 42=>1, 43=>1, 44=>1, 45=>1, 46=>1, 47=>1, 48=>1, 49=>1, 52=>1, 53=>1, 54=>1, 55=>1, 56=>1, 57=>1, 58=>1, 59=>1, 60=>1, 61=>1, 62=>1, 63=>1, 64=>1, 66=>1, 67=>1, 68=>1, 69=>1, 70=>2, 72=>1}

hash.sort_by { |k, v| v }.reverse.first(5).to_h
#=> {12=>2, 70=>2, 24=>2, 44=>1, 67=>1}
如果您的值是数字,则可以用{k,v | v}替换
sort_。反向
替换为
sort_by{k,v |-v}


注意,Ruby 2.1中引入了
Array#to_h
;对于旧版本,您必须使用哈希[Hash.sort by…first(5)]。

排序并取前五名?@DaveNewton Yes!,抱歉问题标题不正确!没有密钥不唯一的散列。什么是
@common_locations
?在这种情况下,您可以按-v排序并跳过
反向
步骤。此外,您不能在数组上调用
_h
;您需要将其传递给
Hash[
]
而不是:
Hash[Hash.sort_by{k,v |-v}。first(5)]