Как при помощи 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 шт):
Вот простейший пример, перемещает первый найденный непустой элемент в конец строки.
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)
Вывод
[[, , , , ], [, +, , , ], [, , !, , ], [, , , @, ], [, , , , #], [$, , , , ], [%, , , , ], [*, , , , ], [&, , , , ]]
[[, , , , ], [, , , , +], [, , , , !], [, , , , @], [, , , , #], [, , , , $], [, , , , %], [, , , , *], [, , , , &]]
В 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]
// ]
Посмотрите на официальном сайте, какие еще есть способы создания коллекций.