2013-03-19 70 views
3

我有兩個數組:添加兩個陣列排列的紅寶石

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

我想要得到的陣列是他們的總和,即

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

會不會有一種優雅的方式來做到這一點?

注:

我現在知道,簡單地用b = [3,4]添加a = [1,2]得到c = [4,6]我需要做的

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

,但我不知道怎麼樣,如果可能的話,這個延伸對我的問題。

回答

4
a.zip(b).map { |x,y| x.zip(y).map { |s| s.inject(:+) } } 
3
c = [a, b].transpose.map{|ary| ary.transpose.map{|ary| ary.inject(:+)}} 
2

的替代,以用於操縱數字更好的表達,是使用 'narray'

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

c = a + b 

。 。 。是的,c = a + b,它也快得多。

儘管如此,NArray期望所有元素都包含相同類型的對象。如果是這種情況,特別是如果你的現實世界問題有更大的矩陣,那麼我強烈推薦narray來處理這種數據