2017-01-05 5 views
0

давайте говорить, что у меня есть двумерные массивыКак суммировать двумерные массивы

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

Я хотел бы сделать это в рубин

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

Спасибо заранее.

+0

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

ответ

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#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]] 
+0

undefined method 'sum' for [10, 45]: Array – user7373737

+0

@ user7373737 'sum' работает в Ruby 2.4.0. Я обновил свой ответ, используйте это, если у вас нет установленного Ruby 2.4.0. –

+0

Спасибо, что он отлично работает – user7373737

 Смежные вопросы

  • Нет связанных вопросов^_^