在这里给出一系列哈希:
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
如果两者都是最高值,那么让它返回Wood
和MATCH (o:Pizza)-[:CONTAINS]->(:Ingredient {name : 'salami'}),
(o)-[:CONTAINS]->(:Ingredient {name : 'ham'})
RETURN o
的最佳方法是什么?
答案 0 :(得分:4)
您可以使用group_by
和max
:
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
之类的东西那样简洁,但上述方法的好处是你只需迭代一次数组。
希望它有所帮助!