最大値ハッシュのキーを見つける方法は?


110

私は次のハッシュを持っています {"CA"=>2, "MI"=>1, "NY"=>1}

Rubyを使用してキーの最大値のペアを返すにはどうすればよいですか?「CA」を返してほしい


3
同じ最大値のキーが複数ある場合はどうなりますか?
Gabe

回答:


230

これは、ハッシュ要素の値に応じて、最大ハッシュキーと値のペアを返します。

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

49
[key、value]を含む2要素の配列を取得することに注意してください
justingordon

6
hash.max_by {| k、v | v} [0]はキーを提供します。
nfriend21 14

4
また、ネクタイは順位の最初に行くことに注意してください。
ロビーギルフォイル2015

8
ペアに対してhash.max_by(&:last)を実行し、キーに対してhash.max_by(&:last).firstを実行することもできます。
mahemoff


16

別の方法は次のとおりです。

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

これは、各キーと値のペアを実行し、値がすべての値の最大値に等しいキーを返します(この場合はputsの)。ネクタイがある場合、これは複数のキーを返すはずです。


5

キーと値のペアを返す場合は、selectメソッドを使用できます。

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

4

順序(2番目に大きい、最小など)に基づいて複数のキーと値のペアを取得する場合、より効率的な方法は、ハッシュを1回ソートしてから目的の結果を取得することです。

def descend_sort(hash)
   hash = hash.sort_by {|k,v| v}.reverse
end

最大値のキー

puts *hash[0][0]

最大と最小を取得

puts *hash[0], *hash[hash.length-1]

2番目に大きいキーと値のペア

Hash[*hash[1]]

ハッシュ配列をハッシュに戻すには

hash.to_h

1

私は今日同様の問題でこれを行い、これで終わりました:

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

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

Rubyが2.3未満の場合 は&.last、次の.try(:last)いずれかに置き換えることができます。ソースハッシュが空の場合、いずれかを安全に使用できます。{}


-3

これは、サイズでソートされたハッシュの最後のキーを返します。ただし、同じ値のキーが2つある場合があります。

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)

2
選択した答え?may_byは、低レベルのソートよりもはるかに優れています。sort + lastよりもコンパクトで、使用するメモリも少なくなります。
tokland
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.