Kotlin 2d阵列初始化

Khu*_*ufu 2 arrays multidimensional-array kotlin

请看一下我的2D-Array-Initialization.代码有效.

class World(val size_x: Int = 256, val size_y: Int = 256) {

  var worldTiles = Array(size_x, { Array(size_y, { WorldTile() }) })

    fun generate() {
      for( x in 0..size_x-1 ) {
          for( y in 0..size_y-1 ) {
              worldTiles[x][y] = WorldTile()
          }
      }
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是它运行初始化两次.基本上我想在generate()函数中实例化WorldTile-Object.所以第3行不应该在那里调用"new WorldTile".我怎样才能做到这一点?

还有正确的Kotlin穿越2d阵列的方式吗?

A-S*_*ani 11

将所有初始化为固定值:

// A 6x5 array of Int, all set to 0.
var m = Array(6) {Array(5) {0} }
Run Code Online (Sandbox Code Playgroud)

用 lambda 初始化:

// a 6x5 Int array initialise i + j
var m = Array(6) { i -> Array(5) { j -> i + j } }
Run Code Online (Sandbox Code Playgroud)

另一种方式:这是初始化浮点数(3 x 6)的二维数组的示例:

var a = Array(3) { FloatArray(6)} // define an 3x6 array of float numbers
for(i:Int in 0 until a.size) {
    for(j : Int in 0 until a[i].size) {
        a[i][j] = 0f // initialize with your value here.
    }
}
Run Code Online (Sandbox Code Playgroud)


Pix*_*ant 9

您可以创建worldTiles一个lateinit属性,并在函数中执行所有初始化generate:

class World(val size_x: Int = 256, val size_y: Int = 256) {

  lateinit var worldTiles: Array<Array<WorldTile>>

  fun generate() {
    worldTiles = Array(size_x, {
        Array(size_y, {
            WorldTile()
        })
    })
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您worldTiles在调用之前尝试访问,generate则会收到异常警告,表明它尚未初始化.