据我所知,F#中的Map数据类型是不可变的(与数组相反)。这让我产生了一个问题,Map.add函数内部到底做了什么。它是否复制整个结构以保留原始结构(这将非常低效),还是使用了更聪明的策略来确保时间复杂度仍然大致为log n?不幸的是,在Microsoft文档中并没有提到像复杂性这样的重要信息,尽管在某些情况下它很重要。
F# Map
使用平衡树来实现。在更新时,只有与更新路径相关的节点会被更新,其余节点将会被重用。
顺便提一下,Map
的源代码可以在这里看到:https://github.com/Microsoft/visualfsharp/blob/master/src/fsharp/FSharp.Core/map.fs