Arrays 在多维数组中求和所有值的Ruby方法

Arrays 在多维数组中求和所有值的Ruby方法,arrays,ruby,Arrays,Ruby,我试图对数组的元素求和。不使用展平。我已尝试使用以下方法: def multi_array_sum(arr) sum = 0 arr.each do |row| row.each do |column| sum += column end end return sum end 但不幸的是,它不起作用。考虑到数组中的第一个元素不是另一个数组本身,我不能使用每个,例如,数组=[[1,1,2],[3,4,5],如果所有元素都是数字或数组,并且您希望将它们全

我试图对数组的元素求和。不使用展平。我已尝试使用以下方法:

def multi_array_sum(arr)
  sum = 0
  arr.each do |row|
    row.each do |column|
      sum += column
    end
  end
  return sum
end

但不幸的是,它不起作用。考虑到数组中的第一个元素不是另一个数组本身,我不能使用
每个
,例如,
数组=[[1,1,2],[3,4,5]
,如果所有元素都是数字或数组,并且您希望将它们全部相加,我不知道如何遍历多维数组:

array.flatten.inject(:+)

只需使用标准数组函数,然后就可以枚举了

array.flatten.reduce(:+)

因此,如果您绝对不能使用扁平化(这有点奇怪),您可以使用一个简单的递归方法:

def multi_array_sum(arr)
  case arr
    when Fixnum
      arr
    when Array
      arr.reduce(0) { |agg, sub_arr| agg + multi_array_sum(sub_arr) }
  end
end

如果您100%确定无法使用
展平
,则可以使用:

array.map { |a| a.reduce(:+) }.reduce(:+)

如果每个内部数组大小相同且仅包含数字,则可以使用该方法将数组转换为矩阵(不带块),以创建枚举器来生成矩阵的元素,并(aka
inject
)计算矩阵所有元素的和

require 'matrix'

def sum_all(arr)
  Matrix[*arr].each.reduce(:+)
end

sum_all [[1,2],[3,4]] #=> 10

在什么意义上
array=[[1[1,2],[3,4,5]
nxn数组?这里
n
的值是多少?您的数组无效