Scala:将Map [K,V]转换为IntMap [V]的最有效方法是什么?

Seb*_*iot 4 scala map

假设我有一个带有toInt方法的Point类,并且Map[Point,V]对于某种类型我有一个不可变的V。在Scala中将其转换为an的最有效方法是IntMap[V]什么?这是我当前的实现:

def pointMap2IntMap[T](points: Map[Point,T]): IntMap[T] = {
    var result: IntMap[T] = IntMap.empty[T]
    for(t <- points) {
        result += (t._1.toInt, t._2)
    }
    result
}
Run Code Online (Sandbox Code Playgroud)

[编辑]我的意思主要是更快,但是即使它们显然不是更快,我也会对较短的版本感兴趣。

Pav*_*tin 5

IntMapapply为此有一个内置的工厂方法():

IntMap(points.map(p => (p._1.toInt, p._2)).toSeq: _*)
Run Code Online (Sandbox Code Playgroud)

如果速度是一个问题,则可以使用:

points.foldLeft(IntMap.empty[T])((m, p) => m.updated(p._1.toInt, p._2))
Run Code Online (Sandbox Code Playgroud)