【问题标题】:Multidimensional array of Objects in KotlinKotlin 中的多维对象数组
【发布时间】:2019-08-03 05:55:25
【问题描述】:

我是 Kotlin 的新手,我想创建一个自定义类的多维数组,允许使用 null。类似的东西

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

...

array_map[1][2] = Obstacle()

我该怎么做?谢谢!

【问题讨论】:

    标签: arrays oop kotlin


    【解决方案1】:

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

    data class Obstacle(var num: Int){}
    

    Obstacle 对象的二维数组如下:

    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)
    

    所以你应该如下声明你的二维数组

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

    【讨论】:

      【解决方案2】:

      您可以使用private var arrayMap: Array&lt;Array&lt;Obstacle?&gt;&gt; = arrayOf()。只需根据需要使用Array&lt;&gt; 包装即可。

      【讨论】:

        【解决方案3】:

        您的代码将按原样编译。问题只是数组大小无法更改,arrayOf&lt;Array&lt;Obstacle?&gt;&gt;() 创建了一个空数组,因此array_map[1][2] = Obstacle() 在运行时失败。 (除非你在它们之间的某个地方使用array_map = ...。注意你应该更喜欢val arrayMap,它不能被重新分配,除非你有特定的理由使用var。)

        如果你想让你的数组以空值开头,标准库中有arrayOfNulls,但它只创建一个一维数组,而你真正需要的是一个空数组数组。你可以写一个辅助函数:

        inline fun <reified T> matrixOfNulls(n: Int, m: Int) = Array(n) { arrayOfNulls<T>(m) }
        
        private val arrayMap = matrixOfNulls<Obstacle>(5, 5) // example arguments
        

        【讨论】:

          【解决方案4】:

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

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

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

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

          在最后一种情况下,在创建之后,您可以简单地执行设置项:

          arr2D[1][2] = Obstacle() 
          

          【讨论】:

            【解决方案5】:

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

            声明:

            var matrix: Array<Array<Obstacle?>>
            

            实例化和初始化:

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

            【讨论】:

            • 老实说,这说明了很多,所以这个 sn-p 应该直接转到 kotlinlang.org/docs ))
            猜你喜欢
            • 2015-12-30
            • 2018-09-10
            • 2012-07-23
            • 1970-01-01
            • 2016-12-09
            • 1970-01-01
            • 1970-01-01
            • 2019-12-25
            • 1970-01-01
            相关资源
            最近更新 更多