6

ハッシュがあり、ハッシュの最大値のキー(またはキーと値のペア)を返したいのですが。したがって、真の最大値が1つしかない場合は、その1つのキーが返されます。ただし、同じ値を持つ複数のキーと値のペアがある場合は、これらのキーがすべて返されます。Rubyでこれをどのように達成できますか?

my_hash.max_by {|k,v| v} #only returns one key/value pair
4

2 に答える 2

11

すべてのペアが必要な場合は、次のようにします

max = my_hash.values.max
Hash[my_hash.select { |k, v| v == max}]
于 2012-10-22T05:36:15.033 に答える
2

シングルライナー:

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"]]
于 2012-10-22T20:48:54.163 に答える