在ruby中对数组中的每3个元素求和

时间:2015-09-16 20:08:58

标签: arrays ruby

是否有任何有效且简短的方法来对数组的每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]

1 个答案:

答案 0 :(得分:8)

Enumerable#each_slice的简短方法:

[1, 2, 3, 4].each_slice(3).map { |e| e.inject(:+) } # => [6, 4]