ruby 如何找到哈希值最大的键?

oprakyz7  于 2023-08-04  发布在  Ruby
关注(0)|答案(8)|浏览(97)

我有以下哈希{"CA"=>2, "MI"=>1, "NY"=>1}
如何使用ruby返回最大键值对?我希望它返回“CA”

bq8i3lrv

bq8i3lrv1#

这将根据哈希元素的值返回最大哈希键值对:

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

字符串

pvcm50d1

pvcm50d12#

我发现这样,返回第一个max值的键

hash.key(hash.values.max)

字符串

ldxq2e6h

ldxq2e6h3#

另一种方式可以如下:

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

字符串
这将遍历每个键值对,并返回(或在本例中为puts)值等于所有值的最大值的键。如果有平局,这应该返回多个键。

wljmcqd8

wljmcqd84#

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

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

tag5nh1u

tag5nh1u5#

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

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

字符串

ctehm74n

ctehm74n6#

我今天在一个类似的问题上做了这个,结果是这样的:

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

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

字符串
对于小于2.3的Ruby,可以将&.last替换为.try(:last),其中任何一个都只是为了防止源哈希为空:{}

kh212irz

kh212irz7#

所提供的答案假设会有single largest value。但是,它可以具有副本。要返回最大值的键(包括任何重复项),可以使用以下方法之一:

  1. x1n1x;
  2. Hash#each
# 1: using `Enumerable#select`

def max_value_keys(hash)
  max_value = hash.values.max
  max_values = hash.select { | key, value | value == max_value }
  max_values.keys
end

print max_value_keys({ a: 20, b: 50, c: 30 }) #=> [:b]
print max_value_keys({ a: 20, b: 50, c: 50 }) #=> [:b, :c]

个字符
写了一个blog post为那些有兴趣了解更多。

4szc88ey

4szc88ey8#

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

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)

字符串

相关问题