弹出如果过去y秒x元素



对不起,这里是rx.net的新手...我能够在RX中做很多事情,但我不需要做的主要工作。

我只希望在过去的y秒内收到x元素时,才希望它能弹出。换句话说,在任何时间点,当推动新元素时,回顾过去的X元素,看看它们是否都发生在过去的y秒内。

我无法弄清楚"回头和计数"部分。

由于滑动性,窗口似乎是正确的操作员,但也许我对窗口的定义有偏见。感觉就像我要做的那样近的功能,但我还不是向导。

此功能将返回属于 y timespan中的 x元素列表。

public static IObservable<IList<T>> GetFullWindows<T>(this IObservable<T> source, int x, TimeSpan y)
{
    return source
        .Publish(_obs => _obs
            .Window(_obs, _ => Observable.Timer(y))
            .SelectMany(window => window.Take(x).ToList())
            .Where(l => l.Count == x)
        );
}

这是一个用法示例:

var obs = Observable.Generate(0, i => i < 20, i => i + 1, i => i, i => TimeSpan.FromMilliseconds((20 - i) * 100));
var b = obs
    .GetFullWindows(4, TimeSpan.FromSeconds(4.5));
b.Subscribe(l => l.Dump()); //using Linqpad

技巧是将BufferWindow与重叠窗口功能一起使用。Window在这里工作得更好,因为如果您符合计数标准,则可以短路。

相关内容

  • 没有找到相关文章

最新更新