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