Ruby数组each_slice_with_index?

如果我有arr = [1, 2, 3, 4]我知道我可以做以下…

 > arr.each_slice(2) { |a, b| puts "#{a}, #{b}" } 1, 2 3, 4 

…和…

 > arr.each_with_index { |x, i| puts "#{i} - #{x}" } 0 - 1 1 - 2 2 - 3 3 - 4 

…但是有没有内置的方式来做到这一点?

 > arr.each_slice_with_index(2) { |i, a, b| puts "#{i} - #{a}, #{b}" } 0 - 1, 2 2 - 3, 4 

我知道我可以build立自己的,并坚持到数组的方法。 只是看看是否有内置的function来做到这一点。

像大多数迭代器方法一样, each_slice在没有块的情况下返回一个枚举,因为ruby 1.8.7+,然后你可以调用更多的枚举方法。 所以你可以这样做:

 arr.each_slice(2).with_index { |(a, b), i| puts "#{i} - #{a}, #{b}" } 
 arr.each_slice(2).with_index { |(*a), i| ... 

还要注意,数组,块的第一个参数可以是* arr

在1.9中,如果没有提供块,许多方法返回一个枚举器。 你可以在枚举器上调用另一个方法。

 arr = [1, 2, 3, 4, 5, 6, 7, 8] arr.each_with_index.each_slice(2){|(a,i), (b,j)| puts "#{i} - #{a}, #{b}"} 

(变化在@ sepp2k)。 结果:

 0 - 1, 2 2 - 3, 4 4 - 5, 6 6 - 7, 8