f# - 如何在 f# 中的列表中解包联合值

标签 f# discriminated-union

您知道要解开单个联合类型的值,您必须这样做:

type Foo = Foo of int*string

let processFoo foo =
    let (Foo (t1,t2)) = foo
    printfn "%A %A" t1 t2 

但我的问题是:是否有办法为列表做到这一点?:
let processFooList (foolist:Foo list )  =
    let ??? = foolist // how to get a int*string list
    ...

谢谢。

最佳答案

最好的方法是使用与 List.map 结合的函数像这样

let processFooList (foolist:Foo list )  = foolist |> List.map (function |Foo(t1,t2)->t1,t2)

关于f# - 如何在 f# 中的列表中解包联合值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20437188/

相关文章:

serialization - 如何在 F# 中将元组序列化为列表?

f# - 可区分联合中的不可变字段

Azure函数预编译函数,HttpRequestMessage未传递给函数

scala - 函数式语言(Erlang、F#、Haskell、Scala)

F# 柯里化(Currying)函数的有趣行为

c# - F#'s async state machines the same as C#' 是 async 还是 go-lang 的 go 命令?

generics - 如何将 F# 联合类型的使用限制为特定选项

c++ - 重新定义类成员数据类型

f# - 如何创建一个函数来检查被区分联合的标签是否匹配?