如何求和二维数组

时间:2017-01-05 20:23:23

标签: arrays ruby matrix sketchup

让我说我有二维数组

array= [[10,12,15,17],[16,32,65,47],[45,48,41,23],[36,25,74,98],  [32,19,66,88],...]

我想在ruby中执行此操作

arr = [[10+45+32+..,12+48+19,15+41+66+..,17+23+88+..],   [16+36+..,32+25+..,65+74+..,47+98+..]

提前谢谢。

1 个答案:

答案 0 :(得分:1)

使用partition分隔和收集偶数索引子阵列和奇数索引子阵列。然后转置每个分区,然后是每个新形成的子阵列的总和。

array = [[10,12,15,17],[16,32,65,47],[45,48,41,23],[36,25,74,98],[32,19,66,88]]

array.partition.with_index { |_,i| i.even? }
               .map { |e| e.transpose.map(&:sum) }
#=> [[87, 79, 122, 128], [52, 57, 139, 145]]

关键方法: Enumerable#partitionInteger#even?Array#transpose。有关详细信息,请参阅ruby-docs。如果你正在使用Ruby版本< 2.4.0,使用inject(:+)代替sum,如下所示:

array.partition.with_index { |_,i| i.even? }
               .map { |e| e.transpose.map { |e| e.inject(:+) } }
#=> [[87, 79, 122, 128], [52, 57, 139, 145]]