2
如果我在Data.Map M中有兩個鍵k0和k1,如何從地圖中刪除k0並用k0替換k1?替換Data.Map中的鍵
什麼是完成此任務的最佳方法?我試圖通過Data.Map的文檔,但我只能找到可以更改值的函數。
如果我在Data.Map M中有兩個鍵k0和k1,如何從地圖中刪除k0並用k0替換k1?替換Data.Map中的鍵
什麼是完成此任務的最佳方法?我試圖通過Data.Map的文檔,但我只能找到可以更改值的函數。
據我所見,沒有單一的庫函數可以有效地執行此操作。然而,你可以自己做這樣的事情:
case M.lookup k0 myMap of
Nothing -> myMap
Just e -> M.insert k1 e (M.delete k0 myMap)
這將需要三個映射操作,每個花費O(logN)。
我們可以在兩個操作如下做到這一點:
case updateLookupWithKey (\_ _ -> Nothing) k0 myMap of
(Nothing, _ ) -> myMap
(Just e, newMap) -> M.insert k1 e newMap
我不認爲這可以進一步提高,有兩個不同的鍵打交道時,因爲我們需要無論如何訪問底層平衡搜索樹兩次。
你好,歡迎來到StackOverflow。請花一些時間閱讀幫助頁面,尤其是名爲[「我可以詢問什麼主題?」(http://stackoverflow.com/help/on-topic)和[「我應該問什麼類型的問題避免問?「](http://stackoverflow.com/help/dont-ask)。更重要的是,請閱讀[Stack Overflow問題清單](http://meta.stackexchange.com/q/156810/204922)。您可能還想了解[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 –
我有點不贊同downvote。這個問題可能會顯示出更多的努力,但手頭的任務足夠小,可以用一句話精確描述,如上所述。 – chi