在Ruby中查找2D数组的总和

bra*_*boy 1 ruby sum multidimensional-array

我有一二维数组.我想创建一个新的二维数组,它在2D数组中找到这些值的总和.

新数组的x,y之和= x时的和,arr1的y + x的总和,arr2的y ...

|1,2,4| |1,1,1| |1,1,1| 
|2,4,6| |1,1,1| |1,1,1| 
|2,4,6| |1,1,1| |1,1,1| 
|2,4,6| |1,1,1| |1,1,1| 
Run Code Online (Sandbox Code Playgroud)

现在添加上面的二维数组将导致,

|3,4,6|
|4,6,8|
|4,6,8|
|4,6,8|
Run Code Online (Sandbox Code Playgroud)

如何在Ruby中实现这一点(不是在任何其他语言中).我写了一个方法,但看起来很长很难看.

Jör*_*tag 5

require 'matrix'

Matrix[
  [1, 2, 4],
  [2, 4, 6],
  [2, 4, 6],
  [2, 4, 6]
] +

Matrix[
  [1, 1, 1],
  [1, 1, 1],
  [1, 1, 1],
  [1, 1, 1]
] +

Matrix[
  [1, 1, 1],
  [1, 1, 1],
  [1, 1, 1],
  [1, 1, 1]
]

# => Matrix[[3, 4, 6], [4, 6, 8], [4, 6, 8], [4, 6, 8]]
Run Code Online (Sandbox Code Playgroud)

或者,如果你想要与@ Jeriko的答案相同的格式,即返回一个Array而不是Matrix:

def sum_arrays(*a)
  return *a.map {|m| Matrix[*m] }.reduce(:+)
end

# data you supplied:
x = [[1, 2, 4], [2, 4, 6], [2, 4, 6], [2, 4, 6]]
y = [[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
z = [[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]

p sum_arrays(x, y, z)
# => [[3, 4, 6], [4, 6, 8], [4, 6, 8], [4, 6, 8]]
Run Code Online (Sandbox Code Playgroud)