c# - Rx IObservable 仅在值发生一定幅度变化时才产生值

标签 c# .net c#-4.0 system.reactive

我觉得这可能是一个非常简单的扩展方法,我错过了但我找不到它......

我基本上想采用一个流来生成一个流,其中的值在每个新值上缓慢递增。我想节流/采样这个,不是按时间,而是按“容差”。例如

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/

相关文章:

c# - Javascript 从 C# 方法获取进度

c# - 构造表达式树导致InvalidPathException

c# - .NET MVC 4 - 保持选定对象列表状态的最佳实践

c# - 对列表中的值进行分组并使用 C# 将输出转换为 JSON

c# - 如何使用自动换行功能在 C#4.0 中动态设置标签框的文本?

c# - WCF、接口(interface)返回类型和 KnownTypes

C# 套接字开始接受与选择?

c# - 不支持客户端 GroupBy

c++ - 错误 C2678 : '==' binary: no operator found which takes a left operand of type 'CSchemaString' (or there is no acceptable conversion)

ajax - ASP.NET MVC JSON 对象可以通过带有动态类型参数的参数传递给 Controller ​​吗?