你是对的GroupBy
是你想要的。设置它可以很容易地提前订阅任何密钥。只是这样做:
IObservable<int> oddNumbers =
Observable
.Range(0, 10)
.GroupBy(x => x % 2)
.Where(gx => gx.Key == 1)
.Merge();
如果我同意,我得到:
1
3
5
7
9
然而,这一点的时候,因为这是浪费直接等价的:
IObservable<int> oddNumbers =
Observable
.Range(0, 10)
.Where(x => x % 2 == 1);
我可以看到它可能有用的唯一方法是如果你这样做:
IConnectableObservable<IGroupedObservable<int, int>> groupedNumbers =
Observable
.Range(0, 10)
.GroupBy(x => x % 2)
.Publish();
Func<IConnectableObservable<IGroupedObservable<int, int>>, int, IObservable<int>> anyProject =
(source, key) =>
source
.Where(gx => gx.Key == key)
.Merge();
IObservable<int> oddNumbers = anyProject(groupedNumbers, 1);
oddNumbers.Subscribe(x => Console.WriteLine(x));
groupedNumbers.Connect();
这仍然给我奇数,但我现在可以创建偶数可观察而无需开始新的分组。
我在想'GroupBy'或'Where'会做诡计。你能张贴代码说明如何/为什么这些不足? – Shlomo
使用一个简单的'.Where'是对这个最明显的答案,因为分组和投影一个还没有出现的组是一样的,只是做'.Where'。你能详细说明吗? – Enigmativity