gpt4 book ai didi

c# - 在 C# 中对可观察对象进行分区

转载 作者:行者123 更新时间:2023-11-30 23:08:31 26 4
gpt4 key购买 nike

我正在寻找某种方法将可观察序列拆分为单独的序列,我可以根据给定的谓词独立处理这些序列。像这样的东西是理想的:

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# 的任何等效项。

最佳答案

GroupBy 可能会移除“观察两次”限制,但您仍然会得到 Where 子句:

public static class X
{
public static (IObservable<T> trues, IObservable<T> falsies) Partition<T>(this IObservable<T> source, Func<T, bool> partitioner)
{
var x = source.GroupBy(partitioner).Publish().RefCount();
var trues = x.Where(g => g.Key == true).Merge();
var falsies = x.Where(g => g.Key == false).Merge();
return (trues, falsies);
}
}

关于c# - 在 C# 中对可观察对象进行分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46505119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com