2015-06-18 24 views
1

我不知道F#有一个叫“平的”奉承地图是一个列表的功能,如从F#是否具有将地图“平放”到列表中的功能,如scala?

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

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

Scala有这个功能,的确F#有?

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

+2

回答最后一个问题:**否**。你不能有没有元组的两种类型的安全列表;这就是他们的目标。最接近你可以得到的是'obj list' – Jwosty

+0

即使Scala不能处理一个混合类型的列表,除非它是一个共享的超类型。 –

回答

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"] 

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

+0

Seq.collect是我想要的。谢谢。 –

相关问题