一个数组中每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]

10-05 23:13
查看更多