【发布时间】:2011-08-27 18:48:47
【问题描述】:
我有以下哈希{"CA"=>2, "MI"=>1, "NY"=>1}
如何使用 ruby 返回最大键值对?我希望它返回“CA”
【问题讨论】:
-
如果有多个key的最大值相同怎么办?
我有以下哈希{"CA"=>2, "MI"=>1, "NY"=>1}
如何使用 ruby 返回最大键值对?我希望它返回“CA”
【问题讨论】:
这将根据散列元素的值返回最大散列键值对:
def largest_hash_key(hash)
hash.max_by{|k,v| v}
end
【讨论】:
我找到了这种方式,返回第一个最大值的key
hash.key(hash.values.max)
【讨论】:
hash[key] 非常高效,但hash.key(value) 必须搜索整个哈希。这个答案搜索哈希两次:首先找到最大值,然后找到与该值匹配的键。
另一种方式可能如下:
hash.each { |k, v| puts k if v == hash.values.max }
这将遍历每个键值对并返回(或在本例中为 puts 的)值等于所有值的最大值的键。如果有平局,这应该返回多个键。
【讨论】:
如果您想根据顺序(第二大、最小等)检索多个键值对,一种更有效的方法是对哈希进行一次排序,然后得到所需的结果。
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
【讨论】:
如果要返回键值对,可以使用select方法:
hash.select {|k,v| v == hash.values.max }
【讨论】:
我今天在一个类似的问题上做了这个,结果是这样的:
hash = { "CA"=>2, "MI"=>1, "NY"=>1 }
hash.invert.max&.last
=> "CA"
对于低于 2.3 的 Ruby,您可以将 &.last 替换为 .try(:last)
如果您的源哈希为空,任何一个都只是一种保障:{}
【讨论】:
这将返回按大小排序的哈希的最后一个键;但是,可能有两个具有相同值的键。
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)
【讨论】: