dictionary - Haskell Data.Map 同时查找和删除

标签 dictionary haskell lookup

我最近在使用 Map输入来自 Data.Map在 State Monad 内部,所以我想写一个函数,在 Map 中查找一个值,并从 State Monad 内部的 Map 中删除它。
我目前的实现是这样的:

lookupDelete :: (Ord k) => k -> State (Map k v) (Maybe v)
lookupDelete k = do
    m <- get
    put (M.delete k m)
    return $ M.lookup k m
虽然这有效,但感觉效率很低。使用命令式语言中的可变映射,找到 delete 的情况并不少见。函数,也返回被删除的值。
我找不到这个功能,所以如果有人知道一个(或可以解释为什么没有),我真的很感激

最佳答案

没有专门用于“删除和查找”的功能。相反,您使用更通用的工具:updateLookupWithKey是“查找和更新”,其中更新可以是删除或修改。

updateLookupWithKey :: Ord k => 
  (k -> a -> Maybe a) -> k -> Map k a -> (Maybe a, Map k a)

lookupDelete k = do
  (ret, m) <- gets $ updateLookupWithKey (\_ _ -> Nothing) k
  put m
  pure ret

关于dictionary - Haskell Data.Map 同时查找和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63564817/

相关文章:

python - pandas - 涉及分类分组的最近值查找

android - 如何打开设备中安装的 map 列表?

Python:将此列表转换为字典

haskell - 在 Haskell 中调试类型错误

haskell - 实例声明时出现模式匹配错误

scala - 如何在给定多个条件的情况下对 Spark 数据帧执行 "Lookup"操作

python - 如何从字典中制作分组的 fiddle 图

python - 如果项目的长度为 1 或更小,则从字典中删除项目

string - 在 Haskell 中生成大量文本的有效方法

perl - 我如何查看 Perl 哈希是否已经有某个键?