Ruby方法,用于对多维数组中的所有值求和

我试图总结一个数组的元素。 没有使用展平。 我尝试过使用以下内容:

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

但不幸的是,它没有用。 我不知道如何迭代多维数组,考虑到如果数组中的第一个元素不是另一个数组本身就不能使用each数组,例如, array = [[1, [1, 2], [3, 4, 5]]

如果所有元素都是数字或数组,并且您想要将它们全部加起来:

 array.flatten.inject(:+) 

只需使用标准数组函数,然后枚举。

 array.flatten.reduce(:+) 

所以如果你绝对不能使用flatten(这有点奇怪),你可以使用一个简单的递归方法:

 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%确定不能使用flatten那么您可以使用:

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

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

 require 'matrix' def sum_all(arr) Matrix[*arr].each.reduce(:+) end sum_all [[1,2],[3,4]] #=> 10