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