F#是否具有“平坦”功能?列表的地图,像scala?

时间:2015-06-18 02:45:34

标签: list dictionary types f# flat

我想知道F#是否有一个名为" flat"将地图奉为列表,例如

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

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

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

换句话说,F#列表是否包含不同类型的元素? 感谢。

1 个答案:

答案 0 :(得分:4)

F#没有“具有不同类型元素的列表”类型,但您可以执行以下操作。

首先,您可以在地图和配对列表之间进行转换:

> 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"]
但是,我不知道这在实践中有多大帮助。