.net 结合IObservable<;IObservable<;T>&燃气轮机;进入IList<;T>;
我将传入连接公开为:.net 结合IObservable<;IObservable<;T>&燃气轮机;进入IList<;T>;,.net,c#-4.0,system.reactive,.net,C# 4.0,System.reactive,我将传入连接公开为: IObservable<double> 结果: >[a1,b1,c1] >[a1,b2,c1] >[a2,b2,c1] >[a2,b2,c2] >[a2,b3,c2] 你知道这个想法,但是如果一个新的连接进来,我希望一旦新的连接推送新的值,现在数组的大小就变成4 所有这些都是我现在可以使用的 m_joined.Select(vv => vv.Average()); 每次推入新值时,流式处理所有流的平均值 对Rx实施此类扩
IObservable<double>
结果:
>[a1,b1,c1]
>[a1,b2,c1]
>[a2,b2,c1]
>[a2,b2,c2]
>[a2,b3,c2]
你知道这个想法,但是如果一个新的连接进来,我希望一旦新的连接推送新的值,现在数组的大小就变成4
所有这些都是我现在可以使用的
m_joined.Select(vv => vv.Average());
每次推入新值时,流式处理所有流的平均值
对Rx实施此类扩展有何建议
感谢您的帮助。主要问题是将可观察列表转换为可观察列表
IObservable<List<T>> CombineNLatest<T>(List<IObservable<T>> list){
return list
.Aggregate
( Observable.Return(new List<T>())
, (a, n) => Observable.CombineLatest
( a
, b
, (l, e) => l.Concat(e).ToList()));
}
IObservable组合测试(列表){
返回列表
总数的
(Observable.Return(新列表())
,(a,n)=>可观察的组合测试
(一)
B
,(l,e)=>l.Concat(e.ToList());
}
像这样的东西,虽然我还没有测试过。现在你有问题了,你需要
建立您的列表>
IObservable<List<IObservable<T>>
CollectList<T>
(this IObservable<IObservable<T>> input)
{
var initial = new List<IObservable<T>>();
return Observable.Create(observer => {
return input.Subscribe( o => {
initial.Append(o);
observer.OnNext(initial);
}
});
}
IObservable{
返回输入。订阅(o=>{
首字母。附加(o);
OnNext观察员(首字母);
}
});
}
再次没有测试,但我希望总体思路是明确的。现在把它们锁在一起
IObservable<IObservable<T>> input = ...;
IObservable<IObservable<List<T>>> intermediate = input
.CollectList()
.Select( list => CombineNLatest(list) );
IObservable<List<T>> final = intermediate.Switch();
IObservable输入=。。。;
IObservable intermediate=输入
.LIST()
.选择(列表=>CombineLenTest(列表));
IObservable final=中间.Switch();
IObservable<List<T>> CombineNLatest<T>(List<IObservable<T>> list){
return list
.Aggregate
( Observable.Return(new List<T>())
, (a, n) => Observable.CombineLatest
( a
, b
, (l, e) => l.Concat(e).ToList()));
}
IObservable<List<IObservable<T>>
CollectList<T>
(this IObservable<IObservable<T>> input)
{
var initial = new List<IObservable<T>>();
return Observable.Create(observer => {
return input.Subscribe( o => {
initial.Append(o);
observer.OnNext(initial);
}
});
}
IObservable<IObservable<T>> input = ...;
IObservable<IObservable<List<T>>> intermediate = input
.CollectList()
.Select( list => CombineNLatest(list) );
IObservable<List<T>> final = intermediate.Switch();