3

我似乎找不到将两个数组添加在一起的方法。例如有没有办法添加 a = [1,2,3] b = [4,5,6] 得到结果 c = [5,7,9]

4

3 回答 3

7

我没有比这更好的了:c = a.zip(b).map { |x, y| x + y }

假设您的数组具有相同的大小。

于 2012-09-25T14:10:29.397 回答
7

问题是当数组大小不同时:

a = [1,2]
b = [4,5,6]
ary = a.map.with_index{ |m,i| m + b[i].to_i }
=> [5, 7]

a = [1,2,3]
b = [4,5]
ary = a.map.with_index{ |m,i| m + b[i].to_i }
=> [5, 7, 3]

如果第二个数组较短,它可以工作。如果第一个数组较短,它会截断结果数组的长度以适应。那可能不是你想要的。

a = [1,2,3]
b = [4,5,6]
ary = a.map.with_index{ |m,i| m + b[i].to_i }
=> [5, 7, 9]

解决数组长度的问题会稍微改变一些事情。我会这样做:

a = [1,2,3]
b = [4,5]
ary = a.zip(b).each_with_object([]){ |( a,b ), m| m << a + b.to_i }
=> [5, 7, 3]
于 2012-09-25T14:16:14.480 回答
0

相同长度数组的另一种选择:

[a,b].transpose.map{|x| x.reduce :+}

添加多个数组时特别有用:

[a,b,c,d,e].transpose.map{|x| x.reduce :+}
于 2012-09-26T03:42:16.853 回答