【发布时间】:2016-08-30 02:09:32
【问题描述】:
在 scala 中合并两个可变集的可变映射的最佳方法是什么?运算必须是可交换的。我尝试过的东西看起来很丑......
import scala.collection.mutable
var d1 = mutable.Map[String, mutable.SortedSet[String]]()
var d2 = mutable.Map[String, mutable.SortedSet[String]]()
// adding some elements. Accumulating nimals with the set of sounds they make.
d1.getOrElseUpdate("dog", mutable.SortedSet[String]("woof"))
d2.getOrElseUpdate("cow", mutable.SortedSet[String]("moo"))
d2.getOrElseUpdate("dog", mutable.SortedSet[String]("woof", "bark"))
魔法(即可交换!)
scala.collection.mutable.Map[String,scala.collection.mutable.SortedSet[String]] =
Map(dog -> TreeSet(bark, woof), cow -> TreeSet(moo))
基本上,我想覆盖 ++ 的定义以合并匹配映射键的集合。请注意 d1 ++ d2 给出了正确的答案,而 d2 ++ d1 没有(所以 ++ 在这里不是可交换的)。
【问题讨论】:
-
为什么是可变的?您想用另一张地图的值更新其中一张地图吗?
-
想一想,我可能也可以使用不可变的。 Mutable 对我如何使用它更有意义。见编辑