说你有:
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)
答案 0 :(得分:2)
您可以定义新的枚举器,遍历现有的枚举器。类似的东西:
enum = Enumerator.new { |y|
enum1.each { |e| y << e }
enum2.each { |e| y << e }
}
答案 1 :(得分:0)
您可以像这样进行Enumerator
类扩展:
class Enumerator
def self.concat(*enumerators)
self.new do |y|
enumerators.each do |e|
e.each {|x| y << x }
end
end
end
end
并使用它:
enum3 = Enumerator.concat(enum1, enum2)