如何对二维数组求和
How to sum two-dimensional arrays
假设我有二维数组
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+..]
提前致谢。
使用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#partition
、Integer#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]]
假设我有二维数组
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+..]
提前致谢。
使用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#partition
、Integer#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]]