8
我试图以功能方式创建词典。我打了一下它,并能够连接两个字典与此代码:使用不可变词典
let d1 = dict [(1, "one"); (2, "two")]
let d2 = dict [(4, "four")]
let d = List.ofSeq d1 @ List.ofSeq d2
这是在F#一成不变的字典工作的正确方法是什么?这似乎有点复杂。
我试图以功能方式创建词典。我打了一下它,并能够连接两个字典与此代码:使用不可变词典
let d1 = dict [(1, "one"); (2, "two")]
let d2 = dict [(4, "four")]
let d = List.ofSeq d1 @ List.ofSeq d2
这是在F#一成不变的字典工作的正确方法是什么?这似乎有点复杂。
dict
函数主要是帮助程序,如果您已经有一个包含所有项目的列表,那么它将根据列表创建一个字典。当你想要添加元素的时候,它并不是那么有用,也就是说,创建包含原始元素的所有元素的新字典以及一些新元素。
在这种情况下,最好使用Map
类型。
// Create map from a list
let m1 = Map.ofSeq [ (1, "one"); (2, "two") ]
// Create map from original map by adding one element
let m2 = m1.Add(4, "four")
向m1
所有元素添加到m2
,你可能会写:
let newM2 = m1 |> Seq.fold (fun m (KeyValue(k, v)) -> Map.add k v m) m2
如果你想使用并行词典?地图可以代替吗?我猜Map会有点慢,因为每次添加新元素时都会返回一个新字典? – Kafo 2017-12-01 01:41:25