3

重複の可能性:
ruby​​: 2 つの配列の対応するメンバーの合計

だから私はこれを行うのに苦労しています。

2 つの配列を追加して、結果を 3 つ目の配列に入れようとしています。今、私は関数を介してこれを実行できるようにしたいと考えています。

したがって、Array_One、Array_Two、Array_Three があります。「比較関数」を one と two に呼び出して Three をその長さにし、それらの長さが一致する場合は、One と Two を加算して結果を 3 にします。

これは 1 つの関数で実行できますか? これを行うより良い方法は?これは私の思考プロセスですが、これを行うための Ruby の知識がありません。

編集:あいまいで申し訳ありません。

Array_One = [3,4]
Array_Two = [1,3]
Array_Three= []

One と Two を、長さを比較して同じ長さであることを確認する関数に渡したいと思います。次に、実際に追加を行う関数を介して送信します。したがって、最終的には Array_Three = [4,7] になります。

4

4 に答える 4

5

あなたの質問の説明は少し紛らわしいですが、これはあなたが望むものかもしれないと思います:

def add_array(a,b)
  a.zip(b).map{|pair| pair.reduce(&:+) }
end

irb> add_array([1,2,3],[4,5,6])
=> [5, 7, 9]

さらに、複数の配列を簡単に追加できるように一般化します。

def add_arrays(first_ary, *other_arys)
  first_ary.zip(*other_arys).map{|column| column.reduce(&:+) }
end

irb> add_arrays([1,2,3],[4,5,6])
=> [5, 7, 9]
irb> add_arrays([1,2,3],[4,5,6],[7,8,9])
=> [12, 15, 18]
于 2012-10-25T23:06:56.977 に答える
3

私があなたの質問を理解したと仮定すると、1つの可能な方法(チェックなし):

x = [1, 2, 3]
y = [4, 5, 6]
z = []
x.each_with_index do |v, i|
  z << v + y[i]
end

別の方法(質問を理解したと仮定して):

[x, y].transpose.map {|v| v.reduce(:+)}
于 2012-10-25T23:03:17.430 に答える
3

add が要素ごとの加算を意味する場合は、次のように使用できます。

def add(a, b)
  a.zip(b).map &:sum
end

sum環境が定義されていると仮定します。

Sum は のエイリアスでreduce(&:+)あり、代わりに使用できます。

zipは、2 つの配列を取り、配列の配列を返す関数です。

[a1, a2, a3, ..., an].zip [b1, b2, b3, ..., bm] 
   #=> [[a1, b1], [a2, b2], [a3, b3], ..., [an, bn]]
   # assuming n <= m

次に、配列の配列を取得し、その配列内のすべての数値を合計してから、map を使用して結果を収集します。

mapブロックを取り、配列を生成する関数です。

[c1, c2, c3, ..., cn].map &block
  # => [block.call(c1), block.call(c2), block.call(c3), ..., block.call(cn)]

したがって、入力例を取得すると

a = [1, 2, 3]
b = [4, 2, 5]

a.zip(b)            #=> [[1,4], [2,2], [3,5]]
a.zip(b).map(&:sum) #=> [[1,4].sum, [2,2].sum, [3,5].sum] #=> [5, 4, 8]

これで、if 条件を使用して同じ長さを確認できます。

def add(a, b)
  a.zip(b).map &:sum if a.size == b.size
end
于 2012-10-25T23:21:54.353 に答える
1

2 つの配列を追加する場合は、単純に追加できます。

array1 = [1, 2, 3]
array2 = ['a', 'b', 'c']

if array1.length == array2.length
  array3 = array1 + array2
end

# array3 = [1, 2, 3, 'a', 'b', 'c']
于 2012-10-25T23:05:53.077 に答える