将选项types列表缩减为仅非元素的最佳方式?
我意外地从一个选项列表到一个只包含一些元素的列表,有点麻烦。
我最初的尝试是:
let ga = List.filter (fun xx -> match xx with | Some(g) -> true | None -> false) gao
但是,当然,这个结果types仍然是一个选项列表。 我不知道如何使用List.map来压缩这个,因为你必须处理匹配语句中的所有情况。 我有一个丑陋的解决scheme,但我想知道是否有更好的东西。
丑陋:
let rec gOptRemove gdec gacc = match gdec with | head :: tail -> match head with | Some(a) -> gOptRemove tail (a :: gacc) | None -> gOptRemove tail gacc | [] -> gacc
我宁愿find一个非recursion的解决scheme,或者找出这种东西的标准方式。
只是
List.choose id
如在
> [Some 4; None; Some 2; None] |> List.choose id;; val it : int list = [4; 2]
List.choose
ID