2
Есть ли эффективный и короткий способ суммирования каждые 3 элемента массива?Суммировать каждые 3 элемента массива в ruby
ar = [1, 2, 3, 4, 5, 6, 7, 8, 1]
sum_ar = [6, 15, 16]
первые 3 элемента 1+2+3=6
Следующие 3 элементы 4+5+6=15
Следующие 3 элементы 7+8+1=15
...
если есть осталось только два элемента, обобщать их
Я мог сделайте примерно следующее:
y=0
s=ar.size/3
((0..s).step(3).to_a).each do |i|
sum_ar[y]=ar[i..i+2].inject(:+)
y=y+1
end
, но тогда я пропущу элементы в случае такого массива, где размер не является точно умножить на 3:
ar=[1, 2, 3, 4, 5, 6, 7, 8]
Это тоже замечательно, так как он возвращает новый массив. Нет необходимости иметь дополнительные шаги для вызова 'sum_arr = Array.new' – onebree
еще один вопрос: как мне сопоставить каждую сумму обратно на эти 3 массива? так что мой первоначальный ar = [6,6,6,4]. Каждый элемент соответствует сумме, в которую он вносил вклад. – Tonja
@Tonja: В идеале это должен быть новый вопрос, но '[1, 2, 3, 4] .each_slice (3) .flat_map {| e | Array.new (e.length, e.inject (: +))} 'является возможным решением. – cremno