3

我有两个数组:

a = [[1,2],[3,4]];
b = [[5,6],[7,8]];

我希望得到的数组是它们的总和,即

c = [[6,8],[10,12]];

会有一种优雅的方式来做到这一点吗?

笔记:

我目前知道,只需添加a = [1,2]withb = [3,4]即可获得c = [4,6]我需要做的事情

c = [a,b].transpose.map{|x| x.reduce(:+)};

但如果可能的话,我不确定如何将其扩展到我的问题。

4

3 回答 3

4
a.zip(b).map { |x,y| x.zip(y).map { |s| s.inject(:+)  } }
于 2013-03-19T12:32:58.783 回答
3
c = [a, b].transpose.map{|ary| ary.transpose.map{|ary| ary.inject(:+)}}
于 2013-03-19T12:32:47.567 回答
3

另一种可以更好地表达操纵数字的方法是使用“narray”

require 'narray'
a = NArray[[1,2],[3,4]]
b = NArray[[5,6],[7,8]]

c = a + b

. . . 是的,真的,c = a + b而且速度也快得多。

不过,您确实为此付出了代价 - NArray 期望所有元素都包含相同类型的对象。如果是这种情况,尤其是如果您的实际问题具有更大的矩阵,那么我强烈建议narray您处理此类数据

于 2013-03-19T12:44:01.253 回答