[英]Fold with Data.Map.adjust
我正在嘗試獲取正確的 function,它將通過遍歷鍵列表來更新一個或多個值。
例子:
s1 = Data.Map.fromList [(1,"value1"), (2,"value2"), (3,"value3")]
通過將列表[1,2]
和更新值"plus"
傳遞給 function,該列表應如下所示:
[(1,"plus"), (2,"plus"), (3,"value3")]
到目前為止,這是我嘗試過的方法,我很難實現 function 遍歷要更新的密鑰列表
changeValue map newValue xs = foldr (\k map -> Map.adjust (newValue)(xs)(sm)) map m
我應該從那里尋找什么? 我認為在這種情況下我不能使用map
。
好的,你在正確的軌道上。
折疊確實是您所需要的。 您需要折疊鍵列表。 起始值是你原來的 map,它在折疊過程中被轉換。
您還正確識別了 function 序列。
adjust
需要 function 作為第一個參數。 這個 function 是\_ -> newValue
,或者只是const newValue
。 我會遠離名稱map
,因為它可能會引起混淆。
經過這些更正后,您的程序可能看起來像這樣:
import qualified Data.Map.Strict as M
s1 = M.fromList [(1,"value1"), (2,"value2"), (3,"value3")]
changeValue m newValue ks = foldr (\k m -> M.adjust (const newValue) k m) m ks
main :: IO ()
main = do
print $ changeValue s1 "plus" [1, 2]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.