一个数组中每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]
最佳答案
与Enumerable#each_slice
的一条捷径:
[1, 2, 3, 4].each_slice(3).map { |e| e.inject(:+) } # => [6, 4]