Załóżmy, żezliczają każdego elementu na liście [Lista [t]] w Scala
val docs = List(List("one", "two"), List("two", "three"))
gdzie np Lista („jeden”, „dwa”) przedstawia dokument zawierający warunki „jeden” i „dwa” i chcesz zbudować mapę z częstotliwością dokumentu dla każdego terminu, czyli w tym przypadku
Map("one" -> 1, "two" -> 2, "three" -> 1)
Jak czy zrobiłbyś to w Scali? (I w sposób efektywny, przy założeniu znacznie większy zbiór danych).
Moja pierwsza myśl Java-jak jest użycie zmienny mapę:
val freqs = mutable.Map.empty[String,Int]
for (doc <- docs)
for (term <- doc)
freqs(term) = freqs.getOrElse(term, 0) + 1
który działa dość dobrze, ale zastanawiam się, jak można zrobić to w bardziej "funkcjonalny" sposób, bez uciekania się do mapy zmiennej?
Możesz skrócić inicjalizację mapy:' docs.flatten.foldLeft (Map [String, Int]() withDefaultValue 0) {(m, x) => ...} ' – paradigmatic
Dziękujemy!Nie mam pojęcia, dlaczego przeoczyłem tę funkcję ... – Landei
Wydaje się, że jest szybszy niż "groupBy", więc oznaczam to jako zaakceptowane. Ale obie odpowiedzi są interesujące. –