используя kotlin, как я могу добавить массив в 2d-массив

#arrays #kotlin

Вопрос:

Я хочу взять координаты и добавить их в массив, который я хочу вернуть из функции, но я не знаю, как добавить в kotlin в пустой массив с другим массивом

  var temp:Array<Array<Int>> = arrayOf<Array<Int>>()
                var i:Int = 0
                while (true){
                    // if you see another of the same type then break
                    if(currentPlayer == 1){
                        if(ystart-i < 0){ // if you would go out of bounds on the next it and the current one does not have an opposite then breakwith temp as nothing
                            temp = arrayOf<Array<Int>>()
                            break
                        }else if(touchnum[ystart-i][xstart] == 1){
                            break
                        }else{
                            val slice: IntArray = intArrayOf(xstart, ystart-i)
                            temp.plusElement(slice)

                        }

                    }else{

                    }
 

Комментарии:

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

Ответ №1:

Массивы имеют фиксированную длину в JVM. После создания вы не можете изменить их длину. Эквивалентная концепция для динамически растущих массивов называется списком.

В Kotlin они представлены интерфейсом MutableList (или List когда вам нужна ссылка только для чтения). Вы можете создать экземпляр MutableList с помощью функции mutableListOf<T>() (где T указан тип элементов в списке). Затем вы добавляете элементы с помощью list.add(element) .

Это было для вашего «основного» списка. Теперь давайте поговорим об элементах, которые вы в него вложили.

В Котлине не очень идиоматично представлять кортежи (например, координаты) в виде массивов. Для 2D-координат уже существует тип, называемый Pair<A, B><A, B>. Но, честно говоря, самостоятельно написать доменный класс так дешево, что я рекомендую вам создать свой собственный, например:

 data class Point2D(val x: Int, val y: Int)
 

А затем вы можете добавить экземпляры этого класса в свой список:

 list.add(Point2D(xstart, ystart-i))