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