簡體   English   中英

替換Data.Map中的鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM