红宝石 - 找一个哈希的最大值(S)的键(S)(Ruby - find the key(s) of

2019-08-01 18:18发布

我有一个哈希值,我想返回键(S)(或键/值对(S))的散列的最大值(或多个)。 所以,如果只有一个真正的最大值,则系统会返回一个键; 但是,如果有多个键/值对具有相同的值,它会返回所有这些键。 我怎么能在Ruby中做到这一点?

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

Answer 1:

如果你希望所有对,我会做类似

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


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


文章来源: Ruby - find the key(s) of the largest value(s) of a hash
标签: ruby hash max