Ruby - 找到散列中最大值的键(s)

时间:2012-10-22 05:26:11

标签: ruby hash max

我有一个哈希,我想返回哈希值的最大值的键(或键/值对)。因此,如果只有一个真正的最大值,它将返回该一个键;但是,如果有多个具有相同值的键/值对,则它将返回所有这些键。我怎样才能在Ruby中实现这一目标?

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

2 个答案:

答案 0 :(得分:11)

如果你想要所有配对,我会做类似的事情

max = my_hash.values.max
Hash[my_hash.select { |k, v| v == max}]

答案 1 :(得分: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"]]