Ruby - 查找哈希表中最大值对应的键(s)

7

我有一个哈希表,想要返回哈希表中最大值的键(或键值对)。如果只有一个真正的最大值,它将返回该键;但是,如果有多个键值对具有相同的值,则会返回所有这些键。如何在Ruby中实现这一点?

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

我猜这个问题在这里已经得到了回答:https://dev59.com/GW025IYBdhLWcg3wYE-G - yasir hashmi
你的哈希表中存储了什么类型的值?你只处理整数吗? - Amir Rubin
@yasirhashmi 是的,除了我不想只返回一个,如果它们具有相同的值,我想返回多个k/v对。 - diasks2
@AmirRubin 关键字是一个字符串,值是一个浮点十进制数。 - diasks2
2个回答

11

如果你想获取所有的配对,我会这样做:

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

1
为什么要用 === ?我认为它可能不会做你想要的事情。 - pguardiario

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"]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接