我有下面的散列 {"CA"=>2, "MI"=>1, "NY"=>1}
{"CA"=>2, "MI"=>1, "NY"=>1}
如何使用 ruby 返回最大键值对? 我希望它返回“ CA”
这将返回按大小排序的散列的最后一个键; 但是,可能有两个键具有相同的值。
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)
这将根据 hash 元素的值返回 max hash 键-值对:
def largest_hash_key(hash) hash.max_by{|k,v| v} end
另一种方式可以是:
hash.each { |k, v| puts k if v == hash.values.max }
这将遍历每个键-值对,并返回(或在本例中放置的)键,其中值等于所有值的最大值。如果有领带,这个应该返回不止一个键。
如果希望返回键值对,可以使用 select 方法:
hash.select {|k,v| v == hash.values.max }
我找到了这种方法,返回第一个 max 值的键
hash.key(hash.values.max)
如果您希望根据顺序(第二大、最小等)检索多个键值对,则更有效的方法是对散列排序一次,然后获得所需的结果。
def descend_sort(hash) hash = hash.sort_by {|k,v| v}.reverse end
最大值的键
puts *hash[0][0]
叫上 Max 和 min
puts *hash[0], *hash[hash.length-1]
第二大键值对
Hash[*hash[1]]
将哈希数组转换回哈希数组
hash.to_h
I did this today on a similar problem and ended up with this:
hash = { "CA"=>2, "MI"=>1, "NY"=>1 } hash.invert.max&.last => "CA"
对于 Ruby 小于2.3的代码,可以用 .try(:last)代替 &.last 如果源散列为空,这两种方法都只是一种保护措施: {}
.try(:last)
&.last
{}