所以我很难做到这一点。
我正在尝试添加两个数组并将结果放入第三个数组中。现在我想通过一个函数来做到这一点。
所以我有Array_One,Array_Two和Array_Three。 我想把“比较函数”称为一个和两个,并使三个长度匹配,然后如果长度匹配,我想要添加一个和两个,并将结果放在三个。
这可以在一个功能中完成吗? 更好的方法吗? 这是我的思考过程,但我没有Ruby的知识来做这件事。
编辑: 抱歉模糊不清。
Array_One = [3,4]
Array_Two = [1,3]
Array_Three= []
我想通过一个比较长度并验证它们长度相同的函数传递One和Two。 然后我会在脑海中通过实际添加的函数发送它。 所以最后我会得到Array_Three = [4,7] 希望有所帮助。
答案 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']