编辑Data.Map中的元素(Haskell)

3

我有一个地图(Map (Int,Int) Int),称为Mapp。 我想创建一个函数mod :: Mapp -> [(Int,Int,Int)] -> Mapp,对于给定列表中的每个三元组(a,b,c),设置Mapp[(a,b)] = c。如何实现?

2个回答

1
mod = foldr (\(a, b, c) -> Map.insert (a, b) c)

这个想法非常简单:我们可以使用fold函数逐个插入列表中的元素。

0
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 是左偏的,左边地图中的关联优先级高于右边地图中的关联,有效地用新值替换旧值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接