I am trying to create an array / hash from an array of several hashes with the same keys and average values. My array:
[{: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"}]
Now I want to return something like this:
{:amount=>952000, :gross_amount=>952000, :tax=>152000, :hotel_fees=>0, :base_fare=>800000, :currency=>"INR"}
where values is the average of each hash with the same key.
Is there an easy way to do this. I tried using merge, but the currency is getting 0 with it.
My attempt:
p[0].merge(p[1]){|k,v1,v2| (v1+v2)/2 unless v1 && v2 == "INR"}
Edit:
In fact, my problem did not end here, so after getting the average value, I needed to insert the values inside another hash. So I used something like this:
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
Where offer_array is the one that has my own / first array in separate hashes. I tried this with 2 and 3 hashes, and it works.
If you have suggestions for improving the code, it is open.