web-dev-qa-db-ja.com

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

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

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

100
JZ.

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

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

私はこの方法を見つけて、最初の最大値のキーを返します

hash.key(hash.values.max)
34

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

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

これは、各キーと値のペアを介して実行され、値がすべての値の最大値に等しいキーを返します(この場合はputsの)。同点の場合、複数のキーが返されます。

17

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

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

順序(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
3
Linju

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

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

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

Ruby 2.3未満の場合、_&.last_を.try(:last)に置き換えることができます。ソースハッシュが空の場合は、どちらか一方が安全な手段です:_{}_

1
JP Duffy