在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)
有没有更好的方法来执行此操作或应该使用的其他数据结构?
答案 0 :(得分:3)
addE :: Key -> Key1 -> Int -> MyMap -> MyMap
addE k k1 v = M.alter (Just . M.insert k1 v . fromMaybe M.empty) k