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

c# – 在Rx中,如何在一段时间后对最新项目进行分组?

发布时间:2020-12-15 07:45:37 所属栏目:百科 来源:网络整理
导读:对不起,如果标题不是很清楚,我想不出更好的…… 我正在以IObservable char的形式接收用户输入,并且我想通过在每次用户停止输入超过1秒时对字符进行分组来将其转换为IObservable char []gt ;.因此,例如,如果输入如下: hello(pause)world(pause)!(pause) 我希
对不起,如果标题不是很清楚,我想不出更好的……

我正在以IObservable< char>的形式接收用户输入,并且我想通过在每次用户停止输入超过1秒时对字符进行分组来将其转换为IObservable< char []&gt ;.因此,例如,如果输入如下:

h
e
l
l
o
(pause)
w
o
r
l
d
(pause)
!
(pause)

我希望输出可观察到:

['h','e','l','o']
['w','o','r','d']
['!']

我怀疑解决方案相当简单,但我找不到正确的方法……我试图使用Buffer,GroupByUntil,Throttle和其他一些方法,但无济于事.

任何想法都会受到欢迎!

编辑:我有一些几乎可行的东西:

_input.Buffer(() => _input.Delay(TimeSpan.FromSeconds(1)))
              .ObserveOnDispatcher()
              .Subscribe(OnCompleteInput);

但是每次键入新角色时我都需要重置延迟…

解决方法

如果您的来源很热,缓冲和节流就足够了.要使它变热,您可以使用.Publish().RefCount()来确保您最终只有一个订阅源.
IObservable<IList<T>> BufferWithInactivity<T>(this IObservable<T> source,TimeSpan dueTime)
{
    if (source == null) throw new ArgumentNullException("source");
    //defer dueTime checking to Throttle
    var hot = source.Publish().RefCount();
    return hot.Buffer(() => hot.Throttle(dueTime));
}

(编辑:李大同)

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

    推荐文章
      热点阅读