现在我的数组是:
[[1,2,3],[4,5,6],[]]
我想计算这个数组并将结果返回为:
[5,7,9]
如果有空数组,请将其删除。然后加上每个子阵列的每个位置。
如果使用数组的每种方法,也许我可以得到结果。但是有没有更好的方法只使用ruby的数组方法?
答案 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
方法的单行程,如reject
,reduce
,zip
和map
。
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]