This question already has answers here:
How can I make a ruby enumerator that does lazy iteration through two other enumerators?

(3 个回答)


2年前关闭。




说你有:
enum1 = 1.upto(5)
enum2 = 7.upto(10)
我想:
enum_combined = enum1.some_method(enum2)
使得:
enum_combined.to_a #=> [1, 2, 3, 4, 5, 7, 8, 9, 10]
我在 Enumerator 类上没有看到任何可以执行此操作的方法,但是在推出我自己的解决方案之前,我想确保我没有遗漏一些内置的方法来执行此操作。
要明确:我希望返回的结果是另一个 Enumerator 对象,因为我希望整个计算都是惰性的。
更新
根据链接的副本,实现此目的的方法是:
combined = [enum1, enum2].lazy.flat_map(&:lazy)

最佳答案

您可以定义一个新的枚举器,遍历现有的枚举器。就像是:

enum = Enumerator.new { |y|
  enum1.each { |e| y << e }
  enum2.each { |e| y << e }
}

关于ruby - 内置方式连接两个枚举器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46260536/

10-12 07:33