如何在哈希数组中找到最大值?

Mar*_*nto 1 ruby arrays ruby-on-rails

鉴于这里的哈希数组:

arr = [{:question_type=>"Fire", :total=>0.0}, {:question_type=>"Water", :total=>0.0}, {:question_type=>"Metal", :total=>0.0}, {:question_type=>"Earth", :total=>0.0}, {:question_type=>"Wood", :total=>100.0}]
Run Code Online (Sandbox Code Playgroud)

我想选择总键值最高的哈希值。所以下面的代码似乎可以完成工作

max = arr.max_by{|x| x[:total]}
puts max[:question_type]
#=> Wood
Run Code Online (Sandbox Code Playgroud)

但是,如果我有 2 个具有相同值的哈希,它将只返回第一个

arr2 = [{:question_type=>"Fire", :total=>0.0}, {:question_type=>"Water", :total=>0.0}, {:question_type=>"Metal", :total=>0.0}, {:question_type=>"Earth", :total=>50.0}, {:question_type=>"Wood", :total=>50.0}]

max = arr2.max_by{|x| x[:total]} #it should be arr2
puts max[:question_type]
#=> Earth
Run Code Online (Sandbox Code Playgroud)

什么是得到它返回的最佳方式Earth,并Wood在情况下,两个都是最高值?

pot*_*hin 5

你可以用group_byand做到这一点max

arr.group_by { |x| x[:total] }.max.last
Run Code Online (Sandbox Code Playgroud)