【问题标题】:Editing element of Data.Map haskellData.Map haskell 的编辑元素
【发布时间】:2023-03-20 11:17:01
【问题描述】:

我有一张地图(Map (Int,Int) Int)(叫它Mapp)。我想创建一个函数mod :: Mapp -> [(Int,Int,Int)] -> Mapp,它为给定列表的每个三元组(a,b,c)设置Mapp[(a,b)] = c。怎么做?

【问题讨论】:

    标签: haskell


    【解决方案1】:
    mod = foldr (\(a, b, c) -> Map.insert (a, b) c)
    

    这个想法很简单:我们可以使用fold函数从列表中一个一个地插入元素。

    【讨论】:

      【解决方案2】:
      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 是左偏的,左图中的关联优先于右图中的关联,有效地用新值替换旧值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多