例如,如果我有2张Haskell map :
[("a",1),
("b",2),
("c",1)]
和
[("a",1)]
我如何以这样的方式编写函数:
[("a",2),("b",2),("c",1)]
到目前为止,我只能编写基本案例,仅此而已。
最佳答案
unionWith
中的Data.Map
怎么样?
这是一个示例GHCi session ,在两个包含键'a'的映射m1
和m2
上使用它:
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/