繁体   English   中英

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

[英]Scala: What is the most efficient way convert a Map[K,V] to an IntMap[V]?

假设我有一个带有toInt方法的类Point,对于某些类型V我有一个不可变的Map[Point,V] 。在Scala IntMap[V]它转换为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
}

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

IntMap有一个内置的工厂方法( apply ):

IntMap(points.map(p => (p._1.toInt, p._2)).toSeq: _*)

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

points.foldLeft(IntMap.empty[T])((m, p) => m.updated(p._1.toInt, p._2))

使用breakOut获取IntMap一个衬垫。 它使用breakOut调用解析的自定义构建器工厂CanBuildFrommap到新集合:

Map[Int, String](1 -> "").map(kv => kv)(breakOut[Map[Int, String], (Int, String), immutable.IntMap[String]])

在性能方面,很难说,但它创建了一个新的IntMap ,遍历所有绑定并将它们添加到IntMap 一个手写的迭代器while循环(前面有一个模式匹配来检查源映射是否是一个IntMap )可能会带来更好的性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM