【发布时间】:2013-04-21 21:56:21
【问题描述】:
在 Scala 中压缩两个字典的实用方法是什么?
map1 = new HashMap("A"->1,"B"->2)
map2 = new HashMap("B"->22,"D"->4) // B is the only common key
zipper(map1,map2) 应该给出类似于
Seq( ("A",1,0), // no A in second map, so third value is zero
("B",2,22),
("D",0,4)) // no D in first map, so second value is zero
如果没有功能,任何其他风格也很受欢迎
【问题讨论】:
-
Haskell 的 Data.Map 有一个很棒的组合器,叫做
unionWith,它可以让这个过程变得非常简单。它和它的交集对应物非常有用,我很遗憾它们仅在 Scala 的IntMap和LongMap中可用(主要是因为它们是从 Haskell 翻译过来的,我预计)。 -
@copumpkin:Haskell 太棒了!我将检查 unionWith。我刚刚检查了 IntMap,它现在被 HashMap 从 2.8 取代
-
它并没有真正被
HashMap取代,尽管文档评论表明了这一点。它们是不同的结构,IntMap具有不同的属性。有时您真的不希望在其中使用散列函数,尤其是当您想要维护数据的顺序时。IntMap主要可以实现SortedMap,但我认为现在还不行。一个问题是它遵循“未签名”的顺序,但如果你需要的话,让它表现得像一个签名的顺序并不难。
标签: scala map functional-programming