Collections.map的对象列表

Noe*_*oel 7 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")
]
Run Code Online (Sandbox Code Playgroud)

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

我最好的猜测是

let fooDict = for f in foo do yield f.name,f
Run Code Online (Sandbox Code Playgroud)

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

Gus*_*rra 12

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

[ for f in dates -> f.name,f ] |> dict
Run Code Online (Sandbox Code Playgroud)

要么

dates |> Seq.map (fun f -> f.name, f) |> dict
Run Code Online (Sandbox Code Playgroud)


要创建不可变的Map:

[ for f in dates -> f.name,f ] |> Map.ofSeq
Run Code Online (Sandbox Code Playgroud)

要么

dates |> Seq.map (fun f -> f.name, f) |> Map.ofSeq
Run Code Online (Sandbox Code Playgroud)