如何在散列数组中找到最大值?

时间:2017-10-25 19:35:24

标签: ruby-on-rails arrays ruby

在这里给出一系列哈希:

max = arr.max_by{|x| x[:total]}
puts max[:question_type]
#=> Wood

我想选择总密钥值最高的哈希值。 所以下面的代码似乎做了工作

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

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

Earth

如果两者都是最高值,那么让它返回WoodMATCH (o:Pizza)-[:CONTAINS]->(:Ingredient {name : 'salami'}), (o)-[:CONTAINS]->(:Ingredient {name : 'ham'}) RETURN o 的最佳方法是什么?

4 个答案:

答案 0 :(得分:4)

您可以使用group_bymax

执行此操作
arr.group_by { |x| x[:total] }.max.last

答案 1 :(得分:1)

您可以通过这种方式执行此操作:

max = arr.max_by{|x| x[:total]}
max = arr.select{ |x| x[:total] == max[:total }

答案 2 :(得分:0)

您始终可以获取最大值select

arr = [{: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 = arr.max_by{|x| x[:total]}
max_values = arr.select{|hash| hash[:total] == max[:total]}

答案 3 :(得分:0)

此处发布的一些可靠答案的替代方法是滚动您自己的方法来检索最大值,如果存在关联,则包括倍数:

def get_max(arr)
  result = []
  current_max = 0.0
  arr.each do |hash|
    if hash[:total] > current_max
      result = [hash[:question_type]]
      current_max = hash[:total]
    elsif hash[:total] == current_max
      result.push(hash[:question_type])
    end
  end
  result
end


arr = [{: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}]
puts get_max(arr)
# => ["Earth", "Wood"]

它可能不像使用#max_by#select之类的东西那样简洁,但上述方法的好处是你只需迭代一次数组。

希望它有所帮助!