内置连接两个枚举器的方法

时间:2017-09-17 04:05:56

标签: ruby

说你有:

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)

2 个答案:

答案 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)