我想将 Traversable[T] 转换为带有计数的 Map[T, Int] 直方图。我希望结果是一个不可变的 Map ,它与我会得到的结果相匹配:
traversable.groupBy(_).mapValues(_.length)
但看起来这在空间或时间上效率不高......因为groupBy
维护对可遍历中的每个元素的引用,这在具有少量唯一键的大型可遍历上表现不佳。我真的想要更像这样的东西:
def histogram[T](ts : Traversable[T]) : Map[T, Int] = {
val map = new collection.mutable.HashMap[T, Int].withDefaultValue(0)
ts.foreach { map(_) += 1 }
map.toMap
}
有没有一种库方法可以给我这个结果(理想情况下,可以很好地与并行集合一起使用)?