1

我想根据最大键值返回一个哈希键/值对。我知道max_by有效,但它会在第一个结果时停止。如果出现平局,我如何返回所有结果?

{
  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.
4

1 回答 1

1

我会做 :

hash = {
         foo: 1,
         bar: 3,
         baz: 3
       }

hash.group_by { |_,value| value }.max_by { |key,_| key }.last
# => [[:bar, 3], [:baz, 3]]

破解上述代码:

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]]]
于 2014-04-02T17:27:38.643 回答