c# - 如何从 IObservable<T> 选择递增的值子序列

标签 c# .net system.reactive

这个方法怎么写?

public static IObservable<T> IncreasingSubsequence<T>(this IObservable<T> observable, IComparer<T> comparer)
{
    // ???
}

产生的可观察值应该仅推送那些超过所有先前值的最大值的值。

最佳答案

另一种方法是使用 Scan 和 DistinctUnitChanged。为简单起见,这里有一个使用 int 的例子

IObservable<int> xs;
xs.Scan((last,cur) => cur > last ? cur : last).DistinctUntilChanged()

和更一般的形式

public static IObservable<T> IncreasingSubsequence<T>(this IObservable<T> xs, IComparer<T> comp)
{
    return xs.Scan((last,cur) => comp.Compare(cur, last) == 1 ? cur : last)
                     .DistinctUntilChanged();
}

关于c# - 如何从 IObservable<T> 选择递增的值子序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6644073/

相关文章:

c# - 通过方法将现有的 IEnumerable<int> 转换为字符串 (#,#,#,..)

c# - 需要帮助才能摆脱异常丛林

c# - 预测中的蒙特卡罗模拟?

c# - 如何获取程序集文件版本

vb.net - 对 System.Reactive 中的更改使用react

Rx 的 F# 工作流构建器

c# - Jquery 运行时错误 : object expected

c# - C# 和 MVC 中的 System.Environment.Username 和 User.Identity.Name 有什么区别?

c# - 控制键加鼠标滚轮

c# - .Net 响应式扩展 : Remove Replay