使用不可变字典

时间:2010-11-26 14:35:12

标签: f# dictionary

我正在尝试以功能方式创建字典。我玩了一下,并用这段代码连接了两个词典:

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

这是在F#中使用不可变字典的正确方法吗?这似乎有点复杂。

1 个答案:

答案 0 :(得分: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