我有一张地图MinorCategory
(称之为Comment
)。我想为给定列表集Recurring
的每个三元组(a,b,c)创建一个函数Estimate
。怎么做?
答案 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
是左偏的,因此左侧地图中的关联优先于右侧地图中的关联,有效地将旧值替换为旧值。