块方法 - 如何一起计算数组 - ruby

Methods with blocks - how to calculate arrays together - ruby

我想创建一个方法,使用块以这种方式计算 2 个数组之间的总和; [1,2,3] + [2,4,6] = [3,6,9]。

这是我目前所知道的,我得到的错误告诉我参数数量错误。

*编辑。我必须使用一个方法和一个块来执行此操作

def arraycalc(x,y) 
    yield x,y 
end

arraycalc([1,2,3], [2,4,6]){|x,y| x+y}  
p arraycalc #[3,6,9]

我还是新人 Ruby。有人可以告诉我吗?

你应该使用Array#zip方法:

[1, 2, 3].zip([2, 3, 4]).map { |x, y| x + y } # => [3, 5, 7]

更新:

def arraycalc(array1,array2)
  result_array = array1.zip(array2)
  result_array.map { |x, y| yield x,y } if block_given?
end

arraycalc([1, 2, 3], [2, 3, 4]) { |x, y| x + y } # => [3, 5, 7]
[[1,2,3],[2,4,6]].transpose.map{|a| a.sum}  

[3,6,9]

你可以这样实现

def arraycalc a, b
 a.zip(b).map {|x, y| yield x, y}
end

p arraycalc([1,2], [3,4]) {|x, y| x + y}
#=> [4, 6] 
a = [1,2,3]
b = [4,5,6]

require 'matrix'

(Vector[*a] + Vector[*b]).to_a #=> [5,7,9]

(Matrix[a] + Matrix[b]).to_a   #=> [5,7,9]