给出一个类似(简化)的列表:
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?
答案 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
。