从IGroupedObservable中提取值



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

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)

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

相关内容

  • 没有找到相关文章

最新更新