相关疑难解决方法(0)

将选项类型列表缩减为仅非元素的最佳方法?

从一个选项列表到一个只包含Some的元素的列表,我出乎意料地遇到了一些麻烦.

我最初的尝试是:

    let ga = List.filter (fun xx ->
        match xx with
        | Some(g) -> true
        | None -> false) gao 
Run Code Online (Sandbox Code Playgroud)

但是,当然,这种结果类型仍然是一个选项列表.我不知道如何使用List.map来压缩它,因为你必须处理匹配语句中的所有情况.我有一个丑陋的解决方案,但我想知道是否有更好的东西.

丑陋:

    let rec gOptRemove gdec gacc = 
        match gdec with 
        | head :: tail -> 
            match head with 
            | Some(a) -> gOptRemove tail (a :: gacc)
            | None -> gOptRemove tail gacc
        | [] -> gacc
Run Code Online (Sandbox Code Playgroud)

我更愿意找到一个非递归的解决方案或找出这种事情的标准方法.

f# functional-programming

62
推荐指数
1
解决办法
8159
查看次数

标签 统计

f# ×1

functional-programming ×1