你是對的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