рубин: суммируйте членов-корреспондентов двух или больше массивов

Я имею два (или больше) массивы с 12 целыми числами в каждом (соответствие значениям в течение каждого месяца). Все, что я хочу, должно добавить их вместе так, чтобы у меня был единый массив с суммированными значениями в течение каждого месяца. Вот пример с тремя значениями: [1,2,3] и [4,5,6] => [5,7,9]

Лучшее, которое я мог придумать, было:

[[1,2,3],[4,5,6]].transpose.map{|arr| arr.inject{|sum, element| sum+element}} #=> [5,7,9]

Существует ли лучший способ сделать это? Это просто кажется такой основной вещью хотеть сделать.

38
задан jjnevis 5 October 2016 в 15:03
поделиться

2 ответа

Вот транспонированная версия, предложенная Анурагом:

[[1,2,3], [4,5,6]].transpose.map {|x| x.reduce(:+)}

Это будет работать с любым количеством массивов компонентов. reduce и inject являются синонимами, но reduce , как мне кажется, более четко передает цель кода здесь ...

50
ответ дан 27 November 2019 в 03:23
поделиться

вот моя попытка использовать эту штуку в коде:

// ruby 1.9 syntax, too bad they didn't add a sum() function afaik
[1,2,3].zip([4,5,6]).map {|a| a.inject(:+)} # [5,7,9]

zip возвращает [1,4] , [2,5] , [3,6] , и карта суммирует каждый подмассив.

7
ответ дан 27 November 2019 в 03:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: