加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 将几个Enumerables合而为一

发布时间:2020-12-17 01:24:44 所属栏目:百科 来源:网络整理
导读:有没有办法让几个Enumerable对象显示为单个Enumerable而不将其展平为一个数组?目前我写了一个类似的课程,但我觉得必须有一个内置的解决方案. class Enumerables include Enumerable def initialize @enums = [] end def (enum) @enums enum end def each(bl
有没有办法让几个Enumerable对象显示为单个Enumerable而不将其展平为一个数组?目前我写了一个类似的课程,但我觉得必须有一个内置的解决方案.

class Enumerables
  include Enumerable

  def initialize
    @enums = []
  end

  def <<(enum)
    @enums << enum
  end

  def each(&block)
    if block_given?
      @enums.each { |enum|
        puts "Enumerating #{enum}"
        enum.each(&block)
      }
    else
      to_enum(:each)
    end
  end
end

enums = Enumerables.new
enums << 1.upto(3)
enums << 5.upto(8)
enums.each { |s| puts s }

举个简单的例子,它需要能够像这样接受一个无限的枚举器.

inf = Enumerator.new { |y| a = 1; loop { y << a; a +=1 } };

解决方法

毕竟.在元素上使用带有.each.lazy的 Enumerable::Lazy#flat_map

inf = Enumerator.new { |y| a = 1; loop { y << a; a += 1 } }
[(1..3).to_a,inf].lazy.flat_map { |e| e.each.lazy }.take(10).force
#? [1,2,3,1,4,5,6,7]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读