在模拟中同步 rx 中的事件

Synchronize events in rx in simulations

我有以下流

T1---T2---T3---T4---T5---T6---T7---T8
Q1-Q3-Q7-Q10

我想把它们组合成这样

Q1--------Q3------------------Q7-----

i,e,释放Ti时只释放事件Qi。

是否有使用 RX 原语实现此目的的简单方法?

如果你的关系只是单向的(即 T 事件发生在匹配 Q 之前),你可以使用(js 语法待确认):

tElts.selectMany(i -> qElts.takeWhile(n -> n<=i).where(n -> n==i))

内部流将 return T3 的单个元素流 Q3 和 T2 的空流。

zip 运算符同步多个流。

我不确定您是在寻找 JavaScript 解决方案还是在 System.Reactive 命名空间中寻找解决方案。我有这个有效的 .NET 解决方案。该解决方案假设 Q 总是比 T 生成得更快,即 Qn 永远不会在 Tn 之后对所有 n.

// Generate 8 T's, 1 per second.
IObservable<int> tSource = 
    Observable
    .Interval(TimeSpan.FromSeconds(1))
    .Select(x => (int)(x + 1))
    .Take(8);

// Generate 4 Q's immediately.
IObservable<int> qSource =
    (new int[] { 1, 3, 7, 10 })
    .ToObservable();

var result = 
    qSource
    .SelectMany(x => 
        tSource
        .Where(y => x == y)
        .Take(1));

有趣的是,这看起来像是 Gluck 解决方案的对偶,它也有效。