在Haskell中修改地图的地图

时间:2015-03-10 18:24:28

标签: haskell dictionary

在Haskell中处理地图的正确方法是什么? 假设我想要像

那样的东西
import qualified Data.Map as M

type Key1   = String
type MyMap1 = M.Map Key1 Int
type Key    = String
type MyMap  = M.Map Key MyMap1

我应该如何实现将元素添加到地图中的功能? 我能想到的最好的是

addE :: Key -> Key1 -> Int -> MyMap -> MyMap
addE k k1 v = M.insertWith M.union k (M.singleton k1 v)

但是M.union给了我 O(n)复杂性而不是预期的 O(log n)

有没有更好的方法来执行此操作或应该使用的其他数据结构?

1 个答案:

答案 0 :(得分:3)

addE :: Key -> Key1 -> Int -> MyMap -> MyMap
addE k k1 v = M.alter (Just . M.insert k1 v . fromMaybe M.empty) k