我有以下流事件同步
T1---T2---T3---T4---T5---T6---T7---T8
Q1-Q3-Q7-Q10
我想,所以它看起来像这样
Q1--------Q3------------------Q7-----
I,E,仅释放事件齐Ti时把它们结合起来发行了。
有没有简单的方法来实现这个使用RX原语?
我有以下流事件同步
T1---T2---T3---T4---T5---T6---T7---T8
Q1-Q3-Q7-Q10
我想,所以它看起来像这样
Q1--------Q3------------------Q7-----
I,E,仅释放事件齐Ti时把它们结合起来发行了。
有没有简单的方法来实现这个使用RX原语?
如果你们的关系是单向的唯一(即T
事件匹配Q
一个之前发生),你可以用(JS语法待定)实现这一点:
tElts.selectMany(i -> qElts.takeWhile(n -> n<=i).where(n -> n==i))
内流将返回一个元素T3的流Q3,T2的空流。
我不确定您是否在寻找JavaScript解决方案或System.Reactive
命名空间中的某个东西。我有这个.NET解决方案。该解决方案假定Q总是比T更快地生成,即,对于所有n,Q 将不会在T 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解决方案的双重作用。
查看'.combineLatest'运算符。 –
我看过.combineLatest,但不会暂停'Q'流。例如,'Q3'将在'T2'发射,当它应该等待'T3'时。 –
这个想法是,你会'过滤'不需要的对和'地图'回适当的Q值。 –