haskell - 在 Haskell 中修改 Map of Maps

标签 haskell dictionary

在 Haskell 中使用 map 的正确方法是什么? 假设我想要类似的东西

import qualified Data.Map as M

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

我应该如何实现向 map 添加元素的功能? 我能想到的最好的是

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)

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

最佳答案

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

关于haskell - 在 Haskell 中修改 Map of Maps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28971336/

相关文章:

performance - 为什么嵌套的 MaybeT 会导致指数分配

math - Haskell 中的守卫方程

haskell - Xmonad 切换全屏/xmobar

haskell - 我可以在 Haskell 中作为单个 IO 操作懒惰地读取 n 个文件吗?

java - 实体中带有复合键的 Map<String, Entity>

.net - "bad"在字典中使用对象作为键吗?

dictionary - 从 map 返回传递

haskell - 绑定(bind)变量时Haskell中的无限循环

python - 抽认卡抛硬币词典

python - 将 Bottle FORMSDICT 转换为 Python 字典(以线程安全的方式)