簡體   English   中英

Kotlin 2d 數組初始化

[英]Kotlin 2d Array initialization

請看一下我的 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()
          }
      }
  }
}

問題是它運行了兩次初始化。 基本上我想在 generate() function 中實例化 WorldTile-Object。 所以第 3 行不應該在那里調用“新 WorldTile”。 我怎樣才能做到這一點?

這也是遍歷二維陣列的正確 Kotlin 方式嗎?

您可以將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()
        })
    })
  }
}

如果您在調用generate之前嘗試訪問worldTiles ,您將收到一條異常警告,提示它尚未初始化。

val twoDimStringArray= arrayOf(
    arrayOf("first","second"),
    arrayOf("foo"),
    arrayOf("bar","great kotlin")
)
for (i in twoDimStringArray){
    for(j in i){
        println(j)
    }
}

第一
第二

酒吧
大科特林

要將所有初始化為固定值:

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

用lambda初始化:

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

另一種方式:這是初始化2D浮點數數組(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.
    }
}

有點晚了,但如果正在使用字符串,可能會對某人有所幫助

//init 2d array with a fixed size: 
 var data2 = Array<Array<String>>(2) { arrayOf()}
// fill the 2d array
        data2[0] = arrayOf("123","Freddy x","27")
        data2[1] = arrayOf("124","Elon y","45")

干杯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM