如何计算子阵列的每个位置的总和?

时间:2015-06-29 04:45:54

标签: arrays ruby

现在我的数组是:

[[1,2,3],[4,5,6],[]]

我想计算这个数组并将结果返回为:

[5,7,9]

如果有空数组,请将其删除。然后加上每个子阵列的每个位置。

如果使用数组的每种方法,也许我可以得到结果。但是有没有更好的方法只使用ruby的数组方法?

3 个答案:

答案 0 :(得分:5)

另一个班轮

arr.reject(&:empty?).transpose.map{|x| x.reduce(:+)}

首先摆脱[]

reject(&:empty?)                           # equivalent to reject{|x| x.empty?}

现在.transpose获取

[[1, 4], [2, 5], [3, 6]]

使用

添加每个子列表
.map{|x| x.reduce(:+)}

答案 1 :(得分:4)

这是一个使用许多漂亮的Ruby Array方法的单行程,如rejectreducezipmap

array.reject(&:empty?).reduce { |result, e| result.zip(e).map { |x,y| x+y } }

请参阅Ruby Array documentation以获取更多详细信息,并了解您可以使用其他更灵活的内容。

答案 2 :(得分:0)

array = [[1,2,3],[4,5,6],[]]

require 'matrix'

Matrix[*array.reject { |a| a.empty? }].row_vectors.reduce(:+).to_a
  #=> [5, 7, 9]