如何组合两个热的IObservable-s<int>,以便结果返回一个减去其他总和的总和?



我有两个热的整数可观察量。我想将它们两者合并为一个结果,每次通过任何一个可观察量进入新值时,它总是通知观察者新的总和。

Suppose observable1 goes as follows  ....., 3, 5, 9, 10, 16 -->
observable 2 goes like this .............., 1, 3, 2 --->
我希望结果保持一个总和,将所有内容

添加到通过 1 的总和并减去通过 2 的所有内容,所以在上面的例子中,结果会像这样

..........................................37, 38, 35, 38, 33, 35, 26, 16 --->

我正在考虑通过以下方式进行操作

var result = Observable.Merge(observable1.Scan((p, n) => p + n), 
                             .observable2.Scan((p, n) => p - n)))
                             .Scan((p, n) => p + n);

有人知道更好的方法吗?

而不是外部可观察的 MergeScan,请使用 CombineLatest

var result = Observable
    .CombineLatest(
        obs1.Scan(0, (sum, n) => sum + n).StartWith(0), // running sum of first observable
        obs2.Scan(0, (sum, n) => sum + n).StartWith(0), // running sum of second observable
        (sum1, sum2) => sum2 - sum1); // running difference of the 2 sums

相关内容

  • 没有找到相关文章

最新更新