如何从Option'a的序列中的Some(x)值中提取x值?

Tri*_*Gao 0 f#

对我来说,这似乎是一个脑子.我需要从序列中提取包含在Some(x)中的x值.我可以做到

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

有更好的方法吗?

Joh*_*mer 5

这很简单

xs |> Seq.choose id
Run Code Online (Sandbox Code Playgroud)


Joe*_*ler 5

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

xs |> Seq.choose (function Nothing _ -> None | Something x -> Some x)
Run Code Online (Sandbox Code Playgroud)