我有一个地图(Map (Int,Int) Int)
,称为Mapp
。 我想创建一个函数mod :: Mapp -> [(Int,Int,Int)] -> Mapp
,对于给定列表中的每个三元组(a,b,c),设置Mapp[(a,b)] = c
。如何实现?
我有一个地图(Map (Int,Int) Int)
,称为Mapp
。 我想创建一个函数mod :: Mapp -> [(Int,Int,Int)] -> Mapp
,对于给定列表中的每个三元组(a,b,c),设置Mapp[(a,b)] = c
。如何实现?
mod = foldr (\(a, b, c) -> Map.insert (a, b) c)
fold
函数逐个插入列表中的元素。import qualified Data.Map as M
mod :: (Ord k0, Ord k1) => M.Map (k0, k1) a -> [(k0, k1, a)] -> M.Map (k0, k1) a
mod m l = M.fromList (map (\(a,b,c) -> ((a,b),c)) l) `M.union` m
l
,并将其更改为((a,b),c)
。map (\(a,b,c) -> ((a,b),c)) l
使用新列表创建一个新的映射。
M.fromList (map (\(a,b,c) -> ((a,b),c)) l)
然后使用 M.union
将新的地图和旧的地图 m
进行合并:
M.fromList (map (\(a,b,c) -> ((a,b),c)) l) `M.union` m
由于 M.union
是左偏的,左边地图中的关联优先级高于右边地图中的关联,有效地用新值替换旧值。