迭代-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

我知道我可以构建自己的并将其粘贴到array方法中。 仅查看是否有内置函数可以执行此操作。

Drew asked 2020-08-05T02:53:45Z
3个解决方案
86 votes

像大多数迭代器方法一样,自从ruby 1.8.7+起调用时,each_slice会在不加阻塞的情况下返回可枚举的类,然后您可以在其上调用其他可枚举的方法。 因此,您可以执行以下操作:

arr.each_slice(2).with_index { |(a, b), i| puts "#{i} - #{a}, #{b}" }
sepp2k answered 2020-08-05T02:54:04Z
11 votes
arr.each_slice(2).with_index { |(*a), i| ...

还请注意,数组(块的第一个参数)可以为* arr

mekdigital answered 2020-08-05T02:54:25Z
6 votes

在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
steenslag answered 2020-08-05T02:54:49Z
translate from https://stackoverflow.com:/questions/5983977/ruby-array-each-slice-with-index