2014-03-07 77 views
3

我要做到以下幾點:如何添加兩個多維數組

array1 = [[1, 10], [2, 20], [3, 10], [4, 30]] 
array2 = [[1, 10], [2, 10], [3, 5], [4, 10]] 

我想以這樣一種方式,每個子陣列的第二個元素將被添加添加兩個陣列。我想要以下輸出。

result = [[1,20],[2,30],[3,15],[4,40]] 

回答

11
[array1, array2].transpose.map{|(k, v1), (_, v2)| [k, v1 + v2]} 
# => [[1, 20], [2, 30], [3, 15], [4, 40]] 
+3

像解決方案+1 –

+0

感謝快速的解決方案..它的作品! –

1

如下另一種方法:

array1 = [[1,10],[2,20],[3,10],[4,30]] 
array2 = [[1,10],[2,10],[3,5],[4,10]] 

Hash[array1].merge(Hash[array2]) { |key,old,new| old + new }.to_a 
# => [[1, 20], [2, 30], [3, 15], [4, 40]] 

考慮的merge(other_hash){|key, oldval, newval| block}幫助。

+0

OP的代碼有異味。它應該是陣列的第一位。 – sawa

+0

@sawa我沒有找到你.. –

+3

我在說OP應該讓它們成爲哈希。 OP看起來並不像數組一樣正確。然後,你不需要轉換爲哈希和哈希。 – sawa

0

這可以用的Array#zipArray#map的組合來實現:

result = array1.zip(array2).map { |l, r| [l[0], l[1] + r[1]] } 
#=> [[1, 20], [2, 30], [3, 15], [4, 40]] 

然而,鍵 - 值對通常最好視爲Hash。在其他業務,這將讓你#merge

hash1 
#=> {1=>10, 2=>20, 3=>10, 4=>30} 
hash2 
#=> {1=>10, 2=>10, 3=>5, 4=>10} 
result = hash1.merge(hash2) { |_, l, r| l + r } 
#=> {1=>20, 2=>30, 3=>15, 4=>40} 
+0

你怎麼能用一個帶有字符串的多維數組來做到這一點? –

+0

同樣的道理。試一試! – Johnsyweb