私は次のハッシュを持っています{"CA"=>2, "MI"=>1, "NY"=>1}
ルビーを使用して最大キー値ペアを返すにはどうすればよいですか? 「CA」を返したい
これは、ハッシュ要素の値に応じて最大ハッシュキーと値のペアを返します。
def largest_hash_key(hash)
hash.max_by{|k,v| v}
end
私はこの方法を見つけて、最初の最大値のキーを返します
hash.key(hash.values.max)
別の方法は次のとおりです。
hash.each { |k, v| puts k if v == hash.values.max }
これは、各キーと値のペアを介して実行され、値がすべての値の最大値に等しいキーを返します(この場合はputsの)。同点の場合、複数のキーが返されます。
キーと値のペアを返したい場合は、selectメソッドを使用できます。
hash.select {|k,v| v == hash.values.max }
順序(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
私はこれを同様の問題で今日しましたが、これで終わりました:
_hash = { "CA"=>2, "MI"=>1, "NY"=>1 }
hash.invert.max&.last
=> "CA"
_
Ruby 2.3未満の場合、_&.last
_を.try(:last)
に置き換えることができます。ソースハッシュが空の場合は、どちらか一方が安全な手段です:_{}
_