如何find最大值散列的关键?

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

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

这将根据散列元素的值返回最大散列键值对:

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

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

 a.key(a.values.max) 

另一种方法可能如下:

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

这贯穿每个键 – 值对,并且返回(或者在这种情况下是puts)其中值等于所有值的最大值的键。 这应该返回多个关键,如果有一个领带。

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

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

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

 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 

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

 hash = { "CA"=>2, "MI"=>1, "NY"=>1 } hash.invert.max&.last => "CA" 

对于小于2.3的Ruby,你可以使用.try(:last)replace&.last 。如果你的源代码散列是空的,

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

 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)