我正在寻找一种将scala数组转换为包含数组中发生项目频率的映射的整洁方式。将scala数组转换为项目数映射
例如, :
鉴于像数组:
val arr = Array("one", "one", "two", "three", "one", "three")
我要地图:
Map("one" -> 3, "two" -> 1, "three" -> 2)
我可以写一个函数做到这一点,如
import scala.collection.mutable
def counter[T](arr: Array[T]) = {
val temp = mutable.Map[T, Int]()
for (i <- arr) {
if (temp.contains(i)) temp(i) += 1
else temp(i) = 1
}
temp
}
counter(arr)
我想了解这是否可以更有效地完成。
谢谢! +1,以提高可读性。这种方式抛出一个''java.io.NotSerializableException''错误,虽然在Spark中做同样的事情。因此接受了替代答案。 – septra