F# 使用不可变词典
我正试图以一种实用的方式创建一本词典。我对它进行了一些操作,并能够使用以下代码连接两个字典:F# 使用不可变词典,f#,dictionary,F#,Dictionary,我正试图以一种实用的方式创建一本词典。我对它进行了一些操作,并能够使用以下代码连接两个字典: let d1 = dict [(1, "one"); (2, "two")] let d2 = dict [(4, "four")] let d = List.ofSeq d1 @ List.ofSeq d2 这是在F#中使用不可变字典的正确方法吗?这似乎有点复杂。如果您已经有一个包含所有项目的列表,那么dict函数主要是一个帮助程序,它可以从列表中创建字典。在需要添加元素的情况下,它并不是那么有用—
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会有点慢,因为每次我添加新元素时它都会返回一个新字典?