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

JZ.*_*JZ. 103 ruby hash

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

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

Hck*_*Hck 217

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

def largest_hash_key(hash)
  hash.max_by{|k,v| v}
end
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是你用[key,value]返回一个2元素数组 (42认同)
  • 您还可以为该对执行hash.max_by(&:last),并为该键执行hash.max_by(&:last).first. (7认同)
  • hash.max_by {| k,v | v} [0]给出了密钥. (5认同)
  • 同样值得注意的是领带将按位置顺序排在第一位. (4认同)

小智 34

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

hash.key(hash.values.max)
Run Code Online (Sandbox Code Playgroud)

  • 虽然“hash[key]”非常高效,但“hash.key(value)”必须搜索整个哈希。这个答案搜索哈希两次:首先找到最大值,然后找到与该值匹配的键。 (2认同)

小智 16

另一种方式可能如下:

hash.each { |k, v| puts k if v == hash.values.max }
Run Code Online (Sandbox Code Playgroud)

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


eco*_*ng5 5

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

hash.select {|k,v| v == hash.values.max }
Run Code Online (Sandbox Code Playgroud)


Lin*_*nju 5

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

def descend_sort(hash)
   hash = hash.sort_by {|k,v| v}.reverse
end
Run Code Online (Sandbox Code Playgroud)

最大值的键

puts *hash[0][0]
Run Code Online (Sandbox Code Playgroud)

获取最大值和最小值

puts *hash[0], *hash[hash.length-1]
Run Code Online (Sandbox Code Playgroud)

第二大键值对

Hash[*hash[1]]
Run Code Online (Sandbox Code Playgroud)

将散列数组转换回散列

hash.to_h
Run Code Online (Sandbox Code Playgroud)