3

私は2つの配列を持っています:

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

結果の配列をそれらの合計にします。

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

そうするためのエレガントな方法はありますか?

ノート:

私は現在、単に追加a = [1,2]b = [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 に答える