将两个数组添加到另一个数组中

时间:2012-10-25 22:58:38

标签: ruby arrays

  

可能重复:
  ruby: sum corresponding members of two arrays

所以我很难做到这一点。

我正在尝试添加两个数组并将结果放入第三个数组中。现在我想通过一个函数来做到这一点。

所以我有Array_One,Array_Two和Array_Three。 我想把“比较函数”称为一个和两个,并使三个长度匹配,然后如果长度匹配,我想要添加一个和两个,并将结果放在三个。

这可以在一个功能中完成吗? 更好的方法吗? 这是我的思考过程,但我没有Ruby的知识来做这件事。

编辑: 抱歉模糊不清。

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

我想通过一个比较长度并验证它们长度相同的函数传递One和Two。 然后我会在脑海中通过实际添加的函数发送它。 所以最后我会得到Array_Three = [4,7] 希望有所帮助。

4 个答案:

答案 0 :(得分: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]

答案 1 :(得分:2)

假设我理解你的问题,一种可能的方法(没有任何检查):

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(:+)}

答案 2 :(得分:2)

如果通过添加你的意思是元素添加比你可以使用:

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

假设您的环境已定义sum

Sum是reduce(&:+)的别名,您可以使用它。

zip是一个函数,它接受两个数组并返回一个数组数组:

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

我们采取数组数组并将该数组中的所有数字加在一起,然后用地图收集结果。

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

答案 3 :(得分:1)

如果要添加两个数组,只需添加

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

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

# array3 = [1, 2, 3, 'a', 'b', 'c']