编辑Data.Map haskell的元素

时间:2015-05-22 21:09:48

标签: haskell

我有一张地图MinorCategory(称之为Comment)。我想为给定列表集Recurring的每个三元组(a,b,c)创建一个函数Estimate。怎么做?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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)并将其更改为((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是左偏的,因此左侧地图中的关联优先于右侧地图中的关联,有效地将旧值替换为旧值。