例如,如果我有2张Haskell map :

[("a",1),
 ("b",2),
 ("c",1)]


[("a",1)]

我如何以这样的方式编写函数:
[("a",2),("b",2),("c",1)]

到目前为止,我只能编写基本案例,仅此而已。

最佳答案

unionWith 中的Data.Map怎么样?

这是一个示例GHCi session ,在两个包含键'a'的映射m1m2上使用它:

Prelude> import qualified Data.Map as Map
Prelude Data.Map> let m1 = Map.fromList [('a', 1)]
Prelude Data.Map> let m2 = Map.fromList [('a', 2), ('b', 10)]
Prelude Data.Map> Map.unionWith (+) m1 m2
fromList [('a',3),('b',10)]

如果要定义自己的函数来包装所有内容,请执行以下操作:

mergeMap :: (Ord k, Num a) => Map.Map k a -> Map.Map k a -> Map.Map k a
mergeMap = Map.unionWith (+)

这与

mergeMap a b = Map.unionWith (+) a b

甚至

a `mergeMap` b = Map.unionWith (+) a b

注意:现实生活中的,请确保在惰性 map 和严格 map 之间做出正确的选择,因此在 Data.Map.Strict.unionWith Data.Map.Lazy.unionWith 之间做出正确的选择。

关于haskell - 如何在Haskell中合并2张 map ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32976308/

10-11 22:34
查看更多