我有以下流事件同步
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值。 –