从IGroupedObservable中提取值

时间:2015-12-23 15:49:40

标签: f# system.reactive

Reactive.Linq GroupBy为您留下IObservable<IGroupedObservable<'TKey, 'TValue>>。你如何从IGroupedObservable获得价值?密钥可以通过x.Key访问,因此我认为可以通过某种变换来预测值。

这大致是我想做的事情:

open System.Reactive.Linq

let doStuffWithEvenNumbers i = i*10
let doStuffWithOddNumbers i = i*3

let numbers = Observable.Range(0, 10)
let groups = numbers.GroupBy(fun i -> i % 2 = 0)

let subscription1 = groups.Where(fun i -> i.Key).Subscribe(doStuffWithEvenNumbers)
let subscription2 = groups.Where(fun i -> not i.Key).Subscribe(doStuffWithOddNumbers)

当然,两条let subscriptionX =行无法编译,因为我需要从IGroupedObservable<bool, int>int

1 个答案:

答案 0 :(得分:2)

IGroupedObservable<'TKey, 'TValue>扩展IObservable<'TValue>,这就是你获得价值的方式。在您的情况下,您可以通过多种方式实现这一目标:

// you can use SelectMany to 'flatten' the observable
groups.Where(fun i -> i.Key).SelectMany(fun o -> o :> IObservable<int>).Subscribe(doStuffWithEvenNumbers)

请注意,订阅调用需要Action,而在您的情况下,您将方法定义为Func。您需要删除其返回的值才能使调用工作。