Есть массив строк -
("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())
}