Как найти дубликаты в списке в Scala? - PullRequest
0 голосов
/ 29 мая 2018

У меня есть список несортированных целых чисел, и я хочу найти дублирующиеся элементы.

val dup = List(1|1|1|2|3|4|5|5|6|100|101|101|102)

Мне нужно найти список уникальных элементов, а также сколько раз каждый элемент повторяется.

Я знаю, что могу найти его с кодом ниже:

val ans2 = dup.groupBy(identity).map(t => (t._1, t._2.size))

Но я не могу разбить вышеупомянутый список на "|",Я попытался преобразовать в String, затем с помощью расщепления, но я получил результат ниже:

L i s t (1 0 3)

Я не уверен, почему я получаю этот результат.не могли бы вы помочь?

ссылка: Как найти дубликаты в списке?

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Еще проще преобразовать список дубликатов в набор - набор представляет собой структуру данных, которая по умолчанию не имеет дубликатов.

scala> val dup = List(1,1,1,2,3,4,5,5,6,100,101,101,102)
dup: List[Int] = List(1, 1, 1, 2, 3, 4, 5, 5, 6, 100, 101, 101, 102)

scala> val noDup = dup.toSet
res0: scala.collection.immutable.Set[Int] = Set(101, 5, 1, 6, 102, 2, 3, 4, 100)

Для подсчета элементов просто вызовите метод size в результирующем наборе:

scala> noDup.size
res3: Int = 9
0 голосов
/ 30 мая 2018

Еще один способ решения проблемы

"1 | 1 | 1 | 2 | 3 | 4 | 5 | 5 | 6 | 100 | 101 | 101 | 102" .split ("\ |").groupBy (x => x) .mapValues ​​(_. размер)

res0: scala.collection.immutable.Map [String, Int] = Карта (100 -> 1, 4 -> 1, 5 -> 2, 6 -> 1, 1 -> 3, 102 -> 1, 2 -> 1, 101 -> 2, 3 -> 1)

0 голосов
/ 29 мая 2018

символ |это функция в Scala.Вы можете проверить API здесь

| (x: Int): Int

Возвращает побитовое ИЛИ этого значения и x.

То есть у вас нет List, у вас есть один Integer (103), который является результатом работы | со всеми целыми числами в вашем мнимом списке.

ВашКод в порядке, если вы хотите сделать правильный List, вы должны разделить его элементы запятыми

val dup = List(1,1,1,2,3,4,5,5,6,100,101,101,102)

Если вы хотите преобразовать ваш String до , когда он включенList Вы можете сделать:

"1|1|1|2|3|4|5|5|6|100|101|101|102".split("\\|").toList
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...