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

c# – 带有被动扩展的分区序列

发布时间:2020-12-16 02:01:06 所属栏目:百科 来源:网络整理
导读:关于RX,我有一个小问题.我有一个从键盘进来的符号流,我需要将它们分成组.当’;’时应该启动一个新组符号来自流.简单来说,我需要一个类似Buffer的运算符,但是当某个条件为真时触发,而不是在一段时间延迟或事件计数之后触发.有没有办法用已经存在于RX中的运算
关于RX,我有一个小问题.我有一个从键盘进来的符号流,我需要将它们分成组.当’;’时应该启动一个新组符号来自流.简单来说,我需要一个类似Buffer的运算符,但是当某个条件为真时触发,而不是在一段时间延迟或事件计数之后触发.有没有办法用已经存在于RX中的运算符来构建它,还是应该自己注册?

解决方法

这是一个来源.

var source = new[] { 'a','b',';','c','d','e',';' }.ToObservable();

这是你要求的:

var groups = source
    // Group the elements by some constant (0)
    // and end the group when we see a semicolon
    .GroupByUntil(x => 0,group => group.Where(x => x == ';'))

这是一种使用它的方法:

groups
    // Log that we're on the next group now.
    .Do(x => Console.WriteLine("Group: "))
    // Merge / Concat all the groups together
    // {{a..b..;}..{c..d..e..;}} => {a..b..;..c..d..e..;}
    .Merge()
    // Ignore the semicolons? This is optional,I suppose.
    .Where(x => x != ';')
    // Log the characters!
    .Do(x => Console.WriteLine("  {0}",x))
    // Make it so,Number One!
    .Subscribe();

输出:

Group:
  a
  b
Group:
  c
  d
  e

(编辑:李大同)

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

    推荐文章
      热点阅读