F# 是否具有 "flat" 映射列表的功能,如 scala?

Does F# has function to "flat" a map to list, like scala?

我想知道 F# 是否有一个名为 "flat" 的函数来使映射成为列表,例如来自

{(1,"hello"),(2, "world")}

{1, "hello", 2, "world"}.

Scala有这个功能,F#有吗?

换句话说,F# 列表可以包含不同类型的元素吗? 谢谢

F# 没有 "lists with differently typed elements" 类型,但您可以执行以下操作。

首先,您可以在映射和成对列表之间进行转换:

> let xs = [(1, "foo"); (2, "bar")] ;;
val xs : (int * string) list = [(1, "foo"); (2, "bar")]

> let m = Map.ofSeq xs;;
val m : Map<int,string> = map [(1, "foo"); (2, "bar")]

> let ys = m |> Map.toSeq |> List.ofSeq;;
val ys : (int * string) list = [(1, "foo"); (2, "bar")]

然后您可以将每对中的组件转换为对象,然后将其展平为对象列表:

> 
- let zs = 
-   ys
-   |> Seq.collect (fun (key, value) -> [(key :> obj); (value :> obj)])
-   |> List.ofSeq;;

val zs : obj list = [1; "foo"; 2; "bar"]

不过,我不知道这在实践中有多大帮助。