我有一个哈希表,想要返回哈希表中最大值的键(或键值对)。如果只有一个真正的最大值,它将返回该键;但是,如果有多个键值对具有相同的值,则会返回所有这些键。如何在Ruby中实现这一点?
my_hash.max_by {|k,v| v} #only returns one key/value pair
我有一个哈希表,想要返回哈希表中最大值的键(或键值对)。如果只有一个真正的最大值,它将返回该键;但是,如果有多个键值对具有相同的值,则会返回所有这些键。如何在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"]]