是否有任何有效且简短的方法来对数组的每3个元素求和?
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]
答案 0 :(得分:8)
Enumerable#each_slice
的简短方法:
[1, 2, 3, 4].each_slice(3).map { |e| e.inject(:+) } # => [6, 4]