Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果X元素在过去的Y秒内弹出?_C#_System.reactive - Fatal编程技术网

C# 如果X元素在过去的Y秒内弹出?

C# 如果X元素在过去的Y秒内弹出?,c#,system.reactive,C#,System.reactive,抱歉,这里的RX.NET有点新。。。在RX中我可以做很多事情,但不是我需要做的主要事情 我只希望在过去的Y秒内收到X个元素的可观测对象弹出。换句话说,在任何时间点,当按下新元素时,回顾过去的X元素,看看它们是否都发生在过去的Y秒内 我搞不懂“回顾和计数”的部分 似乎Window是正确的操作符,因为它是可滑动的,但也许我对Window的定义有偏见。我觉得应该在closer函数中这样做,但我还不是向导 此函数将返回属于ytimespan的x元素列表 public static IObservable

抱歉,这里的RX.NET有点新。。。在RX中我可以做很多事情,但不是我需要做的主要事情

我只希望在过去的Y秒内收到X个元素的可观测对象弹出。换句话说,在任何时间点,当按下新元素时,回顾过去的X元素,看看它们是否都发生在过去的Y秒内

我搞不懂“回顾和计数”的部分


似乎Window是正确的操作符,因为它是可滑动的,但也许我对Window的定义有偏见。我觉得应该在closer函数中这样做,但我还不是向导

此函数将返回属于
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)
        );

}
publicstaticiobservable GetFullWindows(此IObservable源,intx,TimeSpan y)
{
返回源
.Publish(\u obs=>\u obs
.Window(_obs,=>Observable.Timer(y))
.SelectMany(window=>window.Take(x).ToList())
.其中(l=>l.计数==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
var obs=Observable.Generate(0,i=>i<20,i=>i+1,i=>i,i=>TimeSpan.frommissions((20-i)*100));
var b=obs
.GetFullWindows(4,TimeSpan.FromSeconds(4.5));
b、 订阅(l=>l.Dump())//使用Linqpad
诀窍是使用带有重叠窗口功能的
缓冲区
窗口
<代码>窗口在这里工作得更好,因为如果满足计数标准,您可以将其短路