代码之家  ›  专栏  ›  技术社区  ›  Max

使用不可变字典

  •  8
  • Max  · 技术社区  · 14 年前

    我正试着用一种实用的方法编一本字典。我用它玩了一会儿,并能将两个字典与此代码连接起来:

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

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

    1 回复  |  直到 14 年前
        1
  •  21
  •   Tomas Petricek    14 年前

    这个 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