我将尝试从具有相同键的多个哈希的数组中创建一个数组/哈希,并计算值的平均值。我的数组:
现在我想返回类似这样的内容:
[{:amount=>897500, :gross_amount=>897500, :tax=>147500, :hotel_fees=>0, :base_fare=>750000, :currency=>"INR"}, {:amount=>1006500, :gross_amount=>1006500, :tax=>156500, :hotel_fees=>0, :base_fare=>850000, :currency=>"INR"}]
现在我想返回类似这样的内容:
{:amount=>952000, :gross_amount=>952000, :tax=>152000, :hotel_fees=>0, :base_fare=>800000, :currency=>"INR"}
在这里,值是每个具有相同键的哈希中值的平均值。
有没有一种简单的方法来做到这一点。我尝试使用merge,但货币变为0。
我的尝试:
p[0].merge(p[1]){|k,v1,v2| (v1+v2)/2 unless v1 && v2 == "INR"}
编辑:
事实上,我的问题并没有在这里结束,因此在获得平均值之后,我需要将这些值插入到另一个哈希表中。 所以我使用了以下方法:
price_array = offer_values.map do |v|
v.inject do |k, v|
k.merge!(price: k[:price].merge(v[:price]){|_, a, b| [a, b].flatten })
end
end
price_array.map do |o|
o[:price] = {}.tap{ |h| o[:price].each {|k, list| h[k] = list.all?{|e| [Fixnum, NilClass].include? e.class} ? list.map(&:to_i).sum/list.size : list.compact.first ; h } }
end
其中offer_array是包含原始/第一个数组的单独哈希值的数组。我已经尝试过使用2个和3个哈希值进行操作,它可以正常工作。
如果您有任何改进代码的建议,欢迎提出。
{:amount=>952000, :gross_amount=>952000, :tax=>152000, :hotel_fees=>0, :base_fare=>800000, :currency=>nil}
- Ravip[0].merge(p[1]){|k,v1,v2| (v1+v2)/2 unless v1 && v2 == "INR"}
- Ravi