Kotlin中对象的多维数组

时间:2019-03-12 16:59:23

标签: arrays oop kotlin

我是Kotlin的新手,我想创建一个自定义类的多维数组,并允许null。像这样

private var array_map = arrayOf<Array<Obstacle?>>()

...

array_map[1][2] = Obstacle()

我该怎么办?谢谢!

4 个答案:

答案 0 :(得分:1)

不确定这是否是您想要的,但是假设Obstacle是一个自定义类,其中的字段为num,如下所示

data class Obstacle(var num: Int){}

Obstacle对象的2D数组如下:

val array: Array<Obstacle?> = arrayOf(Obstacle(123), Obstacle(234))
val arrayOfArray: Array<Array<Obstacle?>> = arrayOf(array)
println(arrayOfArray[0][0]) // would print Obstacle(num=123)
println(arrayOfArray[0][1]) // would print Obstacle(num=234)

因此,您应该按照以下说明声明2D数组

val arrayOfArray: Array<Array<Obstacle?>> = arrayOf()

答案 1 :(得分:1)

您可以使用private var arrayMap: Array<Array<Obstacle?>> = arrayOf()。只需根据需要包裹Array<>

答案 2 :(得分:0)

在这种情况下,我经常使用的方法是:

arr2D = Array(sizeA) { Array(sizeB) { content } } 

请注意,我用字段名称替换了大小,以说明每个数字/字段代表2D数组每个维度的宽度和高度长度。

此外,content应该替换为您要填写每个坐标的主要内容,在您的情况下,您似乎打算设置Obstacle()实例。如果您想在其他时候填写此内容,请放null或快速参考Any()

在最后一种情况下,创建后,您只需执行以下操作即可设置itens:

arr2D[1][2] = Obstacle() 

答案 3 :(得分:0)

如果需要在数组元素的构造函数中每个元素的索引:

声明:

var matrix: Array<Array<Obstacle?>>

实例化和初始化:

matrix = Array(numRows) { row ->
            Array(numCols) { col ->
                Obstacle(row, col)
            }
         }