13

给定一个列表有点像(简化):

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

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

我最好的猜测是

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

但是这种理解语法只能用于创建列表、数组或序列?

4

3 回答 3

19

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

[ 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
于 2013-03-06T22:12:17.153 回答
4

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

Map.ofList([for f in foo do yield (f.name,f)])
于 2013-03-06T22:15:03.990 回答
3

查看该dict函数——它接受一系列键值元组并从中创建一个不可变字典。

使用与您提供的列表类似的列表,您可以使用它Seq.map来创建序列,然后将其通过管道传输到dict.

于 2013-03-06T22:01:30.777 回答