【发布时间】:2017-09-30 17:11:49
【问题描述】:
我正在寻找某种方法将可观察序列拆分为单独的序列,我可以根据给定的谓词独立处理这些序列。像这样的东西是理想的:
var (evens, odds) = observable.Partition(x => x % 2 == 0);
var strings = evens.Select(x => x.ToString());
var floats = odds.Select(x => x / 2.0);
我能想到的最接近的方法是做两个 where 过滤器,但这需要评估条件并处理源序列两次,我对此并不感兴趣。
observable = observable.Publish().RefCount();
var strings = observable.Where(x => x % 2 == 0).Select(x => x.ToString());
var floats = observable.Where(x => x % 2 != 0).Select(x => x / 2.0);
F# 似乎通过 Observable.partition<'T> 和 Observable.split<'T,'U1,'U2> 对此提供了很好的支持,但我找不到与 C# 等效的任何东西。
【问题讨论】:
-
您可以随时拉入 F# 库并从 C# 中使用它
-
查看 F# 源代码,看起来它实际上只是对源流应用了两个过滤器,所以它与我的提议基本相同,有两个
wheres。 -
两个链接都死了,找不到合适的替换链接。
标签: c# system.reactive