这是阵列版本:
Sum 2 hashes attributes with the same key
我有2个数组,例如:
a = [[1,10],[2,20],[3,30]] b = [[1,50],70]]
如何在第一个值(如果存在)上对每个值求和:
c = [[1,60],100]]
解决方法
你可以这样做:
(a + b).group_by(&:first).map { |k,v| [k,v.map(&:last).inject(:+)] }
首先你把阵列放在一起,因为你不关心a和b,你只关心它们的元素.然后,group_by
通过第一个元素对组合数组进行分区,以便可以轻松处理内部数组.然后你只需要用v.map(&:last)
拉出内部数组的第二个(或最后一个)元素,并将它们与inject(:+)
相加.
例如:
>> a = [[1,30]] >> b = [[1,70]] >> (a + b).group_by(&:first).map { |k,v.map(&:last).inject(:+)] } => [[1,100]]