在模拟中同步 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 解决方案的对偶,它也有效。
我有以下流
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 解决方案的对偶,它也有效。