1

这对我来说似乎是一个脑筋急转弯。我需要从序列中提取包装到 Some(x) 中的 x 值。我可以做到

xs |> Seq.fold (fun state x -> match x with -> | Some(y) -> y::state | None -> state) [] 
    |> Seq.toList 
    |> List.rev 
    |> List.toSeq

有没有更好的方法?

4

2 回答 2

5

这很简单

xs |> Seq.choose id
于 2013-09-27T21:55:10.493 回答
5

对于实际上不是标准 Option 类型的可区分联合,您只需提供一个函数,Seq.choose该函数采用可区分联合的实例并将其映射到标准选项。就像是...

xs |> Seq.choose (function Nothing _ -> None | Something x -> Some x)
于 2013-09-28T21:54:58.100 回答