Reputation: 1621
I want to return a hash key/value pair based on max key value. I know max_by
works, but it stops at the first result. How can I return all results in the event of a tie?
{
foo: 1,
bar: 3,
baz: 3
}.max_by { |key, value| value }
#=> [:bar 3] # Only bar comes back, but baz also has a value of 3.
Upvotes: 1
Views: 498
Reputation: 118261
I'd do :
hash = {
foo: 1,
bar: 3,
baz: 3
}
hash.group_by { |_,value| value }.max_by { |key,_| key }.last
# => [[:bar, 3], [:baz, 3]]
Breaking of the above code :
hash.group_by { |_,v| v }
# => {1=>[[:foo, 1]], 3=>[[:bar, 3], [:baz, 3]]}
hash.group_by { |_,v| v }.max_by { |k,_| k }
# => [3, [[:bar, 3], [:baz, 3]]]
Upvotes: 1