如何找到最大值哈希的密钥?

时间:2011-05-18 06:01:58

标签: ruby hash

我有以下哈希{"CA"=>2, "MI"=>1, "NY"=>1}

如何使用ruby返回最大键值对?我希望它返回“CA”

7 个答案:

答案 0 :(得分:211)

这将返回max hash键值对,具体取决于hash元素的值:

def largest_hash_key(hash)
  hash.max_by{|k,v| v}
end

答案 1 :(得分:33)

我找到了这种方式,返回第一个最大值的键

hash.key(hash.values.max)

答案 2 :(得分:17)

另一种方式如下:

hash.each { |k, v| puts k if v == hash.values.max }

这将遍历每个键值对,并返回(或者在这种情况下为puts)键,其中值等于所有值的最大值。如果存在平局,则应返回多个键。

答案 3 :(得分:5)

如果要返回键值对,可以使用select方法:

hash.select {|k,v| v == hash.values.max }

答案 4 :(得分:3)

如果要根据顺序(第二大,最小等)检索多个键值对,则更有效的方法是对哈希值进行一次排序,然后获得所需的结果。

def descend_sort(hash)
   hash = hash.sort_by {|k,v| v}.reverse
end

最大值的关键

puts *hash[0][0]

获取最大值和分钟

puts *hash[0], *hash[hash.length-1]

第二大键值对

Hash[*hash[1]]

将哈希数组转换回哈希

hash.to_h

答案 5 :(得分:1)

我今天就类似的问题做了这件事并最终得到了这个:

hash = { "CA"=>2, "MI"=>1, "NY"=>1 }

hash.invert.max&.last
=> "CA" 

对于小于2.3的Ruby,您可以将&.last替换为.try(:last) 如果您的源哈希是空的,那么任何一个都只是一个安全措施:{}

答案 6 :(得分:-3)

这将返回按大小排序的哈希的最后一个键;但是,可能有两个具有相同值的键。

def largest_hash_key(hash)
  key = hash.sort{|a,b| a[1] <=> b[1]}.last
  puts key
end

hash = { "n" => 100, "m" => 100, "y" => 300, "d" => 200, "a" => 0 }
largest_hash_key(hash)