Vla*_*scu 4 dictionary haskell
如果我有2个Haskell映射,例如:
[("a",1),
("b",2),
("c",1)]
Run Code Online (Sandbox Code Playgroud)
和
[("a",1)]
Run Code Online (Sandbox Code Playgroud)
如何以这样的方式编写函数:
[("a",2),("b",2),("c",1)]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我只能编写基本案例,但这就是全部.
Eri*_*lun 12
unionWith来自Data.Map怎么样?
这是一个在两个地图上使用它的GHCi会话示例m1,m2它们都包含密钥'a':
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)]
Run Code Online (Sandbox Code Playgroud)
如果你想定义自己的函数来包装所有这些:
mergeMap :: (Ord k, Num a) => Map.Map k a -> Map.Map k a -> Map.Map k a
mergeMap = Map.unionWith (+)
Run Code Online (Sandbox Code Playgroud)
这是一样的
mergeMap a b = Map.unionWith (+) a b
Run Code Online (Sandbox Code Playgroud)
甚至
a `mergeMap` b = Map.unionWith (+) a b
Run Code Online (Sandbox Code Playgroud)
你也可以让GHC推断出mapUnion你想要的类型,但它会推断出相同的类型.
注意:在现实生活中,确保在懒惰和严格的地图之间做出正确的选择,因此在Data.Map.Strict.unionWith和之间做出正确的选择Data.Map.Lazy.unionWith.
| 归档时间: |
|
| 查看次数: |
2471 次 |
| 最近记录: |