使用不可变字典的工作方式

8

我正在尝试以函数式的方式创建一个字典。我已经用以下代码成功地将两个字典连接在一起:

let d1 = dict [(1, "one"); (2, "two")]
let d2 = dict [(4, "four")]
let d = List.ofSeq d1 @ List.ofSeq d2

这是在F#中使用不可变字典的正确方式吗?它似乎有点复杂。
1个回答

21

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

如果您想使用Concurrent Dictionary怎么办?地图可以替代它吗?我猜地图会有点慢,因为每次添加新元素时都会返回一个新字典? - Kafo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接