Используйте 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]]
Возможный дубликат [Нахождение суммы 2D массивов в Рубине] (http://stackoverflow.com/questions/3013968/find-the-sum-of-2d-arrays-in-ruby) – jadhachem