在ruby中的“键”上合并或求和2个数组

时间:2012-02-17 18:48:58

标签: ruby arrays sum

这是:Sum 2 hashes attributes with the same key

的数组版本

我有2个数组,例如:

a = [[1,10],[2,20],[3,30]]
b = [[1,50],[3,70]]

如何在第一个值(如果存在)上对每个值求和:

c = [[1,60],[2,20],[3,100]]

2 个答案:

答案 0 :(得分:11)

你可以这样做:

(a + b).group_by(&:first).map { |k, v| [k, v.map(&:last).inject(:+)] }

首先,您将数组与+放在一起,因为您不关心ab,您只关心它们的元素。然后group_by通过第一个元素对组合数组进行分区,以便可以轻松处理内部数组。然后你只需要用v.map(&:last)拉出内部数组的第二个(或最后一个)元素,并将它们与inject(:+)相加。

例如:

>> a = [[1,10],[2,20],[3,30]]
>> b = [[1,50],[3,70]]
>> (a + b).group_by(&:first).map { |k,v| [k, v.map(&:last).inject(:+)] }
=> [[1, 60], [2, 20], [3, 100]]

答案 1 :(得分:10)

您也可以哈希方式

Hash[a].merge(Hash[b]){|k,a,b|a+b}.to_a