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

时间:2013-09-27 21:54:05

标签: 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

有更好的方法吗?

2 个答案:

答案 0 :(得分:5)

这很简单

xs |> Seq.choose id

答案 1 :(得分:4)

对于实际上不是标准选项类型的区别联合,您只需要向Seq.choose提供一个函数,该函数接受您的区分联合的实例并将其映射到标准选项。有点像...

xs |> Seq.choose (function Nothing _ -> None | Something x -> Some x)