我正在寻找一种组合多个流的方法,在这个简单的示例中,我有 5 个,但我可以轻松拥有更多。我目前正在使用 VS 2010,但可能会移至 2012。因此,如果 F# 3.0 的任何功能有帮助,我愿意接受。
在这种情况下,计算构建器会有所帮助吗?
let ``open`` = groupedByDay |> Observable.bind(fun group -> group |> Observable.map (fun bar -> bar.Open) |> Observable.FirstAsync)
let high = groupedByDay |> Observable.bind(fun group -> group |> Observable.map (fun bar -> bar.High) |> Observable.Max)
let low = groupedByDay |> Observable.bind(fun group -> group |> Observable.map (fun bar -> bar.Low) |> Observable.Min)
let close = groupedByDay |> Observable.bind(fun group -> group |> Observable.map (fun bar -> bar.Close,bar.Time) |> Observable.LastAsync)
let volume = groupedByDay |> Observable.bind(fun group -> group |> Observable.map (fun bar -> bar.Volume) |> Observable.Sum)
let combined = ``open``.And(high).And(low).And(close).And(volume).Then(fun o h l (c,t) v -> {Open = o; High = h; Low = l; Close = c; Time = t; Volume = v;})
|> Observable.atwhen
|> Observable.perform(log "Grouped") |> Observable.subscribe(fun _ -> ())