Suponga que tieneContar apariciones de cada elemento en una lista [Lista [T]] en Scala
val docs = List(List("one", "two"), List("two", "three"))
donde, por ejemplo, Lista ("uno", "dos") representa un documento que contenga los términos "uno" y "dos", y que desea construir un mapa con la frecuencia de documentos para cada término, es decir, en este caso
Map("one" -> 1, "two" -> 2, "three" -> 1)
Cómo ¿Harías eso en Scala? (Y de una manera eficiente, asumiendo un conjunto de datos mucho más grande.)
Mi primer pensamiento similar a Java es utilizar un mapa mutable:
val freqs = mutable.Map.empty[String,Int]
for (doc <- docs)
for (term <- doc)
freqs(term) = freqs.getOrElse(term, 0) + 1
que funciona bastante bien, pero me pregunto cómo se podría hacer eso de una manera más "funcional", sin recurrir a un mapa mutable?
Puedes acortar la inicialización del mapa:' docs.flatten.foldLeft (Map [String, Int]() with Default value 0) {(m, x) => ...} ' – paradigmatic
¡Gracias!No tengo idea de por qué he pasado por alto esa función ... – Landei
Parece más rápido que 'groupBy', por lo que marcó esto como aceptado. Pero ambas respuestas son interesantes. –