我想知道可变映射上的更新操作是否比重新分配的性能更好。性能差异在Scala大小可变的映射上使用更新操作
让我们假设我有以下的地图
val m=Map(1 -> Set("apple", "banana"),
2 -> Set("banana", "cabbage"),
3 -> Set("cabbage", "dumplings"))
,我想扭转这个地图:
Map("apple" -> Set(1),
"banana" -> Set(1, 2),
"cabbage" -> Set(2, 3),
"dumplings" -> Set(3))
代码这样做是:
def reverse(m:Map[Int,Set[String]])={
var rm = Map[String,Set[Int]]()
m.keySet foreach { k=>
m(k) foreach { e =>
rm = rm + (e -> (rm.getOrElse(e, Set()) + k))
}
}
rm
}
会如果地图上的尺寸非常大,在地图上使用更新运算符会更有效率吗?
使用地图更新的代码如下:
def reverse(m:Map[Int,Set[String]])={
var rm = scala.collection.mutable.Map[String,Set[Int]]()
m.keySet foreach { k=>
m(k) foreach { e =>
rm.update(e,(rm.getOrElse(e, Set()) + k))
}
}
rm
}
此集合[性能DOC](http://docs.scala-lang.org/overviews/collections/performance-characteristics)可能是利益。 –
谢谢您的重要参考。我以前不知道。我有一个快速查看和我所问的地图集合的情况没有提到。 –