我想在.NET中将两个序列d和A与Reactive Extensions配对。生成的序列R应该将d和A配对,这样每当d上出现新数据时,它都会与A的最新值配对,如下图所示:
D-1--2---3---4---
A---a------b-----
R----2---3---4---
a a b
CombineLatest或Zip并不是我想要的。关于如何实现这一点,有什么想法吗?
谢谢!
您想要Observable.MostRecent
:
var R = A.Publish(_A => D.SkipUntil(_A).Zip(_A.MostRecent(default(char)), Tuple.Create));
将char
替换为可观察到的A
的任何元素类型。
从概念上讲,上面的查询与下面的查询相同。
var R = D.SkipUntil(A).Zip(A.MostRecent(default(char)), Tuple.Create));
此查询的问题是订阅R
会订阅A
两次。这是不可取的行为。在上面的第一个(更好的)查询中,Publish
用于避免订阅A
两次。它采用了一个名为_A
的A
的mock,您可以在传递给Publish
的lambda中多次订阅它,而只订阅一次真正可观察的A
。