我正在尝试使用 Ruby 枚举器获取下一个
n
数量的元素,如下所示:
a = [1, 2, 3, 4, 5, 6]
enum = a.each
enum.next(2) # expecting [1, 2]
enum.next(2) # expecting [3, 4]
但是
#next
不支持这一点。
正确的 Ruby 方法是什么?
可以使用
take
方法
enum.take(2)
如果您需要两个元素的切片,您可以这样做:
e = enum.each_slice(2)
p e.next
#=> [1, 2]
p e.next
#=> [3, 4]
a = [1, 2, 3, 4, 5, 6]
enum = a.dup
enum.shift(2) # => [1, 2]
enum.shift(2) # => [3, 4]
如果您想要来自枚举器的下一个 N 个元素,同时还转发枚举器的内部指针:
Array.new(n) { enum.next }
请注意,如果执行此操作时超出了枚举器的最大界限,则会引发
StopIteration
异常。
但是如果您使用循环枚举器,它就不会引发。示例:
enum = (1..3).cycle
Array.new(6) { enum.next }
# => [1, 2, 3, 1, 2, 3]