如何找到最大值散列的键?

我有下面的散列 {"CA"=>2, "MI"=>1, "NY"=>1}

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

88530 次浏览

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

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 如果源散列为空,这两种方法都只是一种保护措施: {}