我觉得这可能是一个非常简单的扩展方法,我错过了但我找不到它......
我基本上想采用一个流来生成一个流,其中的值在每个新值上缓慢递增。我想节流/采样这个,不是按时间,而是按“容差”。例如
var ob = Enumerable.Range(0, 30).ToObservable(); // 0, 1, 2, 3, 4, 5,....., 30
var largeMovingOb = ob.WhenChangedBy(10); // 0, 10, 20, 30
当我有诸如 [1, 4, 20, 33] 之类的序列并且我想在值的变化超过最后一个值的 15 时输出 - 这将导致:[1, 20]。如果值更改为 12 将导致:[1, 20, 33]
有内置的 Rx 扩展吗?理想情况下,它适用于所有数字类型,而无需为每种类型编写重载。
最佳答案
我认为这很适合 Observable.Scan
var ob = Enumerable.Range(0, 30).ToObservable();
var largeMovingOb = ob.Scan((acc, i) => acc + 10 > i ? acc : i)
.DistinctUntilChanged();
关于c# - Rx IObservable 仅在值发生一定幅度变化时才产生值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13496157/