如何使用 Ruby 枚举器获取接下来的 n 个元素?

问题描述 投票:0回答:3

我正在尝试使用 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 方法是什么?

ruby enumerator
3个回答
5
投票

可以使用

take
方法

enum.take(2)

如果您需要两个元素的切片,您可以这样做:

e = enum.each_slice(2)
p e.next
#=> [1, 2]
p e.next
#=> [3, 4]

1
投票
a = [1, 2, 3, 4, 5, 6]
enum = a.dup
enum.shift(2) # => [1, 2]
enum.shift(2) # => [3, 4]

0
投票

如果您想要来自枚举器的下一个 N 个元素,同时还转发枚举器的内部指针:

Array.new(n) { enum.next }

请注意,如果执行此操作时超出了枚举器的最大界限,则会引发

StopIteration
异常。

但是如果您使用循环枚举器,它就不会引发。示例:

enum = (1..3).cycle

Array.new(6) { enum.next }
# => [1, 2, 3, 1, 2, 3]
© www.soinside.com 2019 - 2024. All rights reserved.