Ich versuche, ein Array/Hash aus einem Array von mehreren Hashes mit gleichen Schlüsseln und einem Durchschnitt von Werten zu erstellen. Meine Array:Hinzufügen von Hashes aus einem 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"}]
Jetzt möchte ich etwas wie folgt zurück:
{:amount=>952000, :gross_amount=>952000, :tax=>152000, :hotel_fees=>0, :base_fare=>800000, :currency=>"INR"}
wo Werte der Durchschnitt der Werte von jedem Hash mit dem gleichen Schlüssel sind.
Gibt es eine einfache Möglichkeit, dies zu tun. Ich habe versucht, Merge zu verwenden, aber Währung wird 0 damit.
Mein Versuch:
p[0].merge(p[1]){|k,v1,v2| (v1+v2)/2 unless v1 && v2 == "INR"}
Edit:
Eigentlich mein Problem noch nicht zu Ende hier, also nach dem Durchschnitt bekommt ich die Werte in einem anderen Hash einzufügen benötigt. So habe ich so etwas wie diese:
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
Wo offer_array in separatem Hashes das mit meiner ursprünglichen/ersten Array ist. Dies habe ich mit 2 und 3 Hashes versucht und es funktioniert.
Wenn Sie irgendwelche Vorschläge zur Verbesserung des Codes haben, ist es offen.
_ "Ich habe versucht, Merge" _ - könnten Sie Ihren Versuch zeigen? – Stefan
Zusammenführen gibt '' zurück: {: Menge => 952000,: Bruttosumme => 952000,: Steuer => 152000,: Hotel_Zahle => 0,: Basis_Farbe => 800000,: Währung => Keine} ' – Ravi
Ich kann nicht haben Währung Null. – Ravi