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

时间:2016-01-26 02:19:25

标签: arrays 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]]

5 个答案:

答案 0 :(得分:8)

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

array.flatten.inject(:+)

答案 1 :(得分:6)

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

array.flatten.reduce(:+)

答案 2 :(得分:1)

所以如果你绝对不能使用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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

require 'matrix'

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

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