Как при помощи iterator убрать или добавить column в mutli dimensional list

fun differentGame(row: Int, column: Int, player: String) {
val list: MutableList<MutableList<String>> = mutableListOf(
        mutableListOf("","","","",""),
        mutableListOf("","","","",""),
        mutableListOf("","","","",""),
        mutableListOf("","","","",""),
        mutableListOf("","","","",""),
        mutableListOf("","","","",""),
        mutableListOf("","","","",""),
        mutableListOf("","","","",""),
        mutableListOf("","","","","")
    )

    val iterator = list.iterator()
    while (iterator.hasNext()){
        val item = iterator.next()
        if (list.size > row){
            iterator.remove()
        } else break
    }
}

Есть такой вот код. При помощи iterator строки убираются нормально, а как убрать или добавить column? Пробовал через стандартные циклы for убирать и строки и колонки, но там выдает ConcurrentModificationException. Погуглил и нашел решение exception'а через итератор


Ответы (2 шт):

Автор решения: Eugene Krivenja

Вот простейший пример, перемещает первый найденный непустой элемент в конец строки.

val list: MutableList<MutableList<String>> = mutableListOf(
        mutableListOf("","","","",""),
        mutableListOf("","+","","",""),
        mutableListOf("","","!","",""),
        mutableListOf("","","","@",""),
        mutableListOf("","","","","#"),
        mutableListOf("$","","","",""),
        mutableListOf("%","","","",""),
        mutableListOf("*","","","",""),
        mutableListOf("&","","","","")
    )

    println(list)

    val iterator = list.iterator()
    while (iterator.hasNext()) {
        val item = iterator.next()
        val el = item.firstOrNull { it.isNotEmpty() }
        el?.also {
            item.remove(it)
            item.add(it)
        }
    }

    println(list)

Вывод

[[, , , , ], [, +, , , ], [, , !, , ], [, , , @, ], [, , , , #], [$, , , , ], [%, , , , ], [*, , , , ], [&, , , , ]]
[[, , , , ], [, , , , +], [, , , , !], [, , , , @], [, , , , #], [, , , , $], [, , , , %], [, , , , *], [, , , , &]]
→ Ссылка
Автор решения: Vadik

В Kotlin можно воспользоваться фабричным методом List() для создания нового списка. Первым аргументом нужно передать желаемое количество элементов списка, а вторым — лямбду для вычисления элементов списка.

Например, так можно получить список из нулей:

List(5) { 0 } // => [0, 0, 0, 0, 0]

У лямбды есть параметр — индекс элемента, если им воспользоваться, то можно получить, например, список из квадратов для неотрицательных чисел:

List(5) { i -> i * i } // => [0, 1, 4, 9, 16]

Возвращаемый тип у лямбды может быть любой, поэтому можно с легкостью создать список из списков пустых строк:

List(5) { List(5) { "" } } // => «матрица» 5x5 с пустыми строками

Напоследок, таблица умножения:

List(5) { x -> List(5) { y -> (x + 1) * (y + 1) } }
// [
//   [1,  2,  3,  4,  5],
//   [2,  4,  6,  8, 10],
//   [3,  6,  9, 12, 15],
//   [4,  8, 12, 16, 20],
//   [5, 10, 15, 20, 25]
// ]

Посмотрите на официальном сайте, какие еще есть способы создания коллекций.

→ Ссылка