ハッシュがあり、ハッシュの最大値のキー(またはキーと値のペア)を返したいのですが。したがって、真の最大値が1つしかない場合は、その1つのキーが返されます。ただし、同じ値を持つ複数のキーと値のペアがある場合は、これらのキーがすべて返されます。Rubyでこれをどのように達成できますか?
my_hash.max_by {|k,v| v} #only returns one key/value pair
すべてのペアが必要な場合は、次のようにします
max = my_hash.values.max
Hash[my_hash.select { |k, v| v == max}]
シングルライナー:
my_hash.reduce({}){|h,(k,v)| (h[v] ||= []) << k;h}.max
irb
> z = {:tree => 3, :two => 2, 'three' => 3}
> z.reduce({}){|h,(k,v)| (h[v] ||= []) << k;h}.max
[3, [:tree, "three"]]