@Lordao

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

Есть массив строк - ("C", "A", "B", "B", "G", "A", "C", "H", "A", "F", "F", "F", "C", "F")

Нужно найти количество дубликатов у оригинала.

Выхлоп должен быть в виде списка объектов, где у объекта есть два поля - буква оригинала и массив дубликатов:

С -> С, С
A -> A,A
B -> B
F -> F,F,F


Чтобы это сделать я прохожусь по всему списку и сравниваю первый элемент с каждым остальным и если есть совпадение, то сохраняю в отдельный объект дубликат вместе с оригиналом, а сам дубликат удаляю из списка. Когда доходом до конца, то удаляем также и первый элемент, чтобы лишний раз не проходиться по списку и приступить к следующим буквам, которые остались. Остальные буквы без дубликатов в конечный массив не добавляется. До тех пор пока изначальный массив не закончится

Но вместого нужного результата получается такой выхлоп:
C [C, C]
A [A, A]
B [B]
F [F]
C [C]


data class Result(var orig : String, var dup : MutableList<String>)


val list = mutableListOf("C", "A", "B", "B", "G", "A", "C", "H", "A", "F", "F", "F", "C", "F")
        val listResult = mutableListOf<Result>()

        while (list.size > 0) {
            val tempList = mutableListOf<String>()
            tempList.addAll(list)

            val result = Result(list[0], mutableListOf())

            tempList.forEachIndexed { index, value ->
                if (index == 0 && tempList.size > 1) return@forEachIndexed
                if (tempList[0] == value) {
                    result.dup.add(value)
                    list.removeAt(index)
                }
            }

            if (list.size > 0) list.removeAt(0)

            if (result.dup.isNotEmpty()) {
                listResult.add(result)
            }
        }

        listResult.forEach {
            Log.d("Result", "!!! "+it.orig +" " +it.dup.toString())
        }
  • Вопрос задан
  • 767 просмотров
Решения вопроса 1
@koperagen
val map = "AABCFD".groupBy { it }
// {A=[A, A], B=[B], C=[C], F=[F], D=[D]}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы