F# 制作一份地图副本,其中在F中插入新项目#

F# 制作一份地图副本,其中在F中插入新项目#,f#,F#,如果我有记录: let r = { a = 1; b = 2 } 我可以做到: let r2 = { r with b = 3 } 但是,地图是否有一个等价物呢 比如: 请允许我这样做: let m2 = m with ["a", 3] 实现这一点最简单的方法是什么?Map.add替换已经存在的键: let m2 = Map.add "a" 3 m 因此,如果我要编辑x个条目,它必须复制x个映射副本?@Thomas-Map.add不会复制映射,只复制从根节点到插入的叶节点的路径。add的

如果我有记录:

let r = { a = 1; b = 2 }
我可以做到:

let r2 = { r with b = 3 }
但是,地图是否有一个等价物呢

比如:

请允许我这样做:

let m2 = m with ["a", 3]

实现这一点最简单的方法是什么?

Map.add
替换已经存在的键:

let m2 = Map.add "a" 3 m

因此,如果我要编辑x个条目,它必须复制x个映射副本?@Thomas-
Map.add
不会复制映射,只复制从根节点到插入的叶节点的路径。
add
的复杂性为O(ln N)。@Thomas如果不想更新多个条目,则需要
Map。一次添加一个条目。这是很容易做到的使用
折叠
;e、 g.
[(key1,value1);(key2,value2)]|>List.fold(fun m'(k,v)->Map.add k v m')m
将添加两个键值对
(key1,value1)
(key2,value2)
,并返回更新后的地图。
let m2 = Map.add "a" 3 m