Dictionary 用Data.Map.adjust折叠
我试图通过迭代一个键列表来获得正确的函数,该函数将更新一个或多个值 例如:Dictionary 用Data.Map.adjust折叠,dictionary,haskell,iteration,fold,Dictionary,Haskell,Iteration,Fold,我试图通过迭代一个键列表来获得正确的函数,该函数将更新一个或多个值 例如: s1 = Data.Map.fromList [(1,"value1"), (2,"value2"), (3,"value3")] 通过向函数传递列表[1,2]和更新值“plus”,列表应如下所示: [(1,"plus"), (2,"plus"), (3,"value3")] import qual
s1 = Data.Map.fromList [(1,"value1"), (2,"value2"), (3,"value3")]
通过向函数传递列表[1,2]
和更新值“plus”
,列表应如下所示:
[(1,"plus"), (2,"plus"), (3,"value3")]
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]
这是我到目前为止所做的尝试,我很难实现在要更新的键列表上迭代的函数
changeValue map newValue xs = foldr (\k map -> Map.adjust (newValue)(xs)(sm)) map m
我应该从那里寻找什么?我认为在这种情况下我不能使用
map
。好吧,你说得对
折叠确实是你需要的。你需要把钥匙的清单折叠起来。起始值是您的原始贴图,并且在折叠过程中进行变换
您还正确识别了功能调整
adjust
需要一个函数作为第一个参数。这个函数是\\->newValue
,或者只是const newValue
。我会远离使用名称map
,因为它可能会引起混淆
经过这些更正后,您的程序可能会如下所示:
[(1,"plus"), (2,"plus"), (3,"value3")]
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]
看起来您正在容器中使用一个映射模块。是否适合您?在这种情况下,
foldl'
是比foldr
更好的选择。