Scala количество вхождений элемента в список списков - PullRequest
0 голосов
/ 27 апреля 2018

Для простоты давайте представим, что у меня есть следующий ввод:

List(List("A", "A"), List("A", "B"), List("B", "C"), List("B", "C"))

Как можно было бы сгруппировать элементы внутри списков таким образом, чтобы я знал, во сколько списков они входят. Например, после вывода функции mapValues ​​ просто для иллюстрации того, что Я имею в виду, что результат предыдущего ввода должен быть примерно таким:

Map("A" -> 2, "B" -> 3, "C" -> 2)

Просто чтобы убедиться, что я ясно дал понять, что я имею в виду, способ интерпретации результата состоит в том, чтобы сказать, что "A" присутствует в 2 подсписках (независимо от того, сколько раз оно появляется внутри определенного подсписка), "B" присутствует в 3 подсписках, а "C" - в 2. Я просто хочу показать, как много разных подсписков, в которых присутствует каждый из отдельных элементов.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Вы также можете использовать операцию fold, чтобы полюбить это

list.flatten.foldLeft(Map.empty[String, Int])((map, word) => map + (word -> (map.getOrElse(word,0) + 1)))
//scala> res2: scala.collection.immutable.Map[String,Int] = Map(A -> 3, B -> 3, C -> 2)
0 голосов
/ 27 апреля 2018

Независимо от производительности, это будет работать:

val list = List(List("A", "A"), List("A", "B"), List("B", "C"), List("B", "C"))
val elements = list.flatten.distinct
elements.map(el => el -> list.count(_.contains(el))).toMap
...