簡體   English   中英

如何在 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

我知道這將創建一個名為學生的地圖。 我在想一種方法來創建此地圖的副本,具有相同的鍵和值。 我檢查了 f# 的文檔,並沒有找到任何克隆/創建地圖副本的方法。

F# 映射是不可變的。 這意味着“更改”地圖實際上意味着創建一個帶有一些細微更改的副本。 復制過程使用技巧使其比完整復制快得多。 對於大部分數據,新版本實際上可以指向舊版本。 這是安全的,因為映射是不可變的:它們永遠不會改變。

這意味着沒有可能的理由復制地圖,除了預熱你的 CPU 😆

這同樣適用於 F# 中的ListSet ,因為它們也是不可變的。 習慣使用不可變的數據結構需要一段時間,但一旦你習慣了,生活就會變得更輕松。


順便說一句,您可以使用較少的代碼創建地圖,如下所示:

let students =
    [ "ABC", "97"
      "Jill", "98" ]
    |> Map

這是一種方法。

let copy =
    students
    |> Seq.map (fun pair -> pair.Key, pair.Value)
    |> Map

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM