我试图总结一个数组的元素。没有使用展平。我尝试过使用以下内容:
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]]
。
答案 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