如何在 f# 中创建地图副本?
How to create a copy of a map in f#?
let students =
Map.empty.
Add("ABC", "97").
Add("Jill", "98");;
printfn "Map - students: %A" students
我知道这将创建一个名为 students 的地图。我正在考虑一种方法来创建具有相同键和值的此地图的副本。我检查了 f# 的文档,但没有找到 clone/create 地图副本的任何方法。
这是一种方法。
let copy =
students
|> Seq.map (fun pair -> pair.Key, pair.Value)
|> Map
F# 映射是不可变的。这意味着“更改”地图实际上意味着创建一个略有改动的副本。复制过程使用技巧使其比完整复制快得多。新版本实际上可以将大部分数据指向旧版本。这样做是安全的,因为地图是不可变的:它们永远不会改变。
这意味着没有可能复制地图的原因,除了热身你的 CPU
这同样适用于 F# 中的 List
和 Set
,因为它们也是不可变的。习惯使用不可变数据结构需要一段时间,但一旦你习惯了,生活就会变得更轻松。
顺便说一下,您可以像这样用更少的代码创建地图:
let students =
[ "ABC", "97"
"Jill", "98" ]
|> Map
let students =
Map.empty.
Add("ABC", "97").
Add("Jill", "98");;
printfn "Map - students: %A" students
我知道这将创建一个名为 students 的地图。我正在考虑一种方法来创建具有相同键和值的此地图的副本。我检查了 f# 的文档,但没有找到 clone/create 地图副本的任何方法。
这是一种方法。
let copy =
students
|> Seq.map (fun pair -> pair.Key, pair.Value)
|> Map
F# 映射是不可变的。这意味着“更改”地图实际上意味着创建一个略有改动的副本。复制过程使用技巧使其比完整复制快得多。新版本实际上可以将大部分数据指向旧版本。这样做是安全的,因为地图是不可变的:它们永远不会改变。
这意味着没有可能复制地图的原因,除了热身你的 CPU
这同样适用于 F# 中的 List
和 Set
,因为它们也是不可变的。习惯使用不可变数据结构需要一段时间,但一旦你习惯了,生活就会变得更轻松。
顺便说一下,您可以像这样用更少的代码创建地图:
let students =
[ "ABC", "97"
"Jill", "98" ]
|> Map