Collections.map的对象列表

时间:2013-03-06 21:54:03

标签: f#

给出一个类似(简化)的列表:

type foo(n:string,m:string,l:string) = 
    member f.name=n
    member f.val1=m
    member f.val2=l
let dates = [
    foo("a","aa","aaa")
    foo("b","bb","bbb")
]

如何制作key:foo.name,value:foo形式的不可变字典类型结构(例如,Map,IDictionary ......任何其他?)?

我最好的猜测是

let fooDict = for f in foo do yield f.name,f

但是for-comprehension语法只能用于制作列表,数组或seq?

3 个答案:

答案 0 :(得分:12)

创建一个不可变的字典(该接口是可变的,但如果你试图修改它会引发异常)

[ for f in dates -> f.name,f ] |> dict

dates |> Seq.map (fun f -> f.name, f) |> dict


创建不可变的地图:

[ for f in dates -> f.name,f ] |> Map.ofSeq

dates |> Seq.map (fun f -> f.name, f) |> Map.ofSeq

答案 1 :(得分:3)

我最终得到了更冗长(并且无知管道):

Map.ofList([for f in foo do yield (f.name,f)])

答案 2 :(得分:2)

查看dict函数 - 它需要一系列键值元组,并从中创建一个不可变字典。

使用您提供的列表,您可以使用Seq.map创建序列,然后将其传输到dict