我正在尋找一種將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