簡體   English   中英

折疊數據.Map.adjust

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

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