.Net Rx一段时间内的第一个和最后一个项目

问题描述 投票:0回答:1

我们有一个用户可以拖动的图表。在鼠标移动时,我们有一个事件设置一个触发OnNext的属性,该属性具有新旧值(这在其他地方是必需的)。

public double Value
{
    get { return _value; }
    set
    {
        if(ShouldUpdate && value!=_value)
            _subject.OnNext(factoryMethod(this, value, _value, Index));
        _value = value;
    }
}

我需要获得拖动的第一个和最后一个项目。通过最后一项我假设事件之间是否有250毫秒的暂停。

即用户开始拖动第一个事件正在存储下一个事件即将到来。当他停止拖动并且没有新事件显示250ms时,正在调用包含首先和最后两个元素的列表的订阅。当用户再次开始拖动时,将创建新的第一个和最后一个(我不关心旧值)。

c# .net system.reactive
1个回答
0
投票

好的,经过一些更多寻找和调整现有的例子,我已经设法提出一个似乎有效的解决方案。

public static IObservable<IList<TSource>> FirstAndLast<TSource>(this IObservable<TSource> source, TimeSpan threshold)
{
    return Observable.Create<IList<TSource>>((obs) =>
    {
        return source.GroupByUntil(_ => true,
            g => g.Throttle(threshold).Select(_ => Unit.Default))
            .SelectMany(i => i.ToList().Select(_=> new List<TSource> {_.First(), _.Last()}))
            .Subscribe(obs);
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.