为每个List元素创建一个包含#of外观的Map

dan*_*nik 2 collections scala

我是Scala的新手.

如果我有以下内容List:

val ls = List("a", "a", "a", "b", "b", "c")
Run Code Online (Sandbox Code Playgroud)

如何创建一个Map包含列表中每个元素的多个外观?

例如,Map上面的列表应该是:

Map("a" -> 3, "b" -> 2, "c" -> 1)
Run Code Online (Sandbox Code Playgroud)

Eri*_*lun 5

list.foldLeft(Map[String, Int]() withDefaultValue 0) { (m, x) => m + (x -> (m(x) + 1)) }
Run Code Online (Sandbox Code Playgroud)

片段在行动:

scala> val list = List("a", "a", "b", "c", "c", "a")
list: List[String] = List(a, a, b, c, c, a)

scala> list.foldLeft(Map[String, Int]() withDefaultValue 0) { (m, x) => m + (x -> (1 + m(x))) }
res1: scala.collection.immutable.Map[String,Int] = Map(a -> 3, b -> 1, c -> 2)
Run Code Online (Sandbox Code Playgroud)

(直接基于Scala中List [List [T]]中每个元素的Count出现次数)