[英]Replace keys in Data.Map
如果我有兩個鍵k0和k1,它們在Data.Map M中,該如何從地圖中刪除k0並將k1替換為k0?
什么是完成此任務的最佳方法? 我試圖瀏覽Data.Map的文檔,但是我只能找到可以更改值的函數。
據我所知,沒有單個庫函數可以有效地為您執行此操作。 但是,您可以自己滾動執行以下操作:
case M.lookup k0 myMap of
Nothing -> myMap
Just e -> M.insert k1 e (M.delete k0 myMap)
這將需要三個映射操作,每個操作的成本為O(log N)。
我們可以通過以下兩個操作來做到這一點:
case updateLookupWithKey (\_ _ -> Nothing) k0 myMap of
(Nothing, _ ) -> myMap
(Just e, newMap) -> M.insert k1 e newMap
我認為這無法進一步改善,因為在處理兩個不同的關鍵字時,無論如何我們都需要訪問兩倍的基礎平衡搜索樹。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.