簡體   English   中英

物體的多維數組迅速出現錯誤?

[英]Multidimensional array of objects bug in swift?

我有一個由項目(對象)組成的多維(2D)數組,我決定使用“自然”方式創建它(因此,我沒有使用技巧將1D數組轉換為2D,而是直接使用2D)。

一個項目在矩陣上的X和Y位置,並且該項目也具有隨機類型。

除了所有項目的Y位置之外,其他所有事情似乎都可以工作...由於Swift處理2D的方式,我需要初始化2D數組,然后正確影響每個項目的值。

我確實驗證了我對這些項目產生的價值,它們可以正常工作。 然后,當我正確設置項目后驗證該項目時,Y位置對於所有項目來說都是唯一的。

class Matrix {
    var nbCol: Int
    var nbRow: Int
    var items: [[Item]]

    init(nbCol: Int, nbRow: Int) {
        self.nbCol = nbCol
        self.nbRow = nbRow
        items = Array<Array<Item>>()
        //Initialize
        for col in 0..<Int(nbCol) {
            items.append(Array(count: nbRow, repeatedValue: Item()))
        }
        //Affect the correct values to each item
        createItems()
    }

    func createItems() {
        //Assign X, Y & type values to the item
        for x in 0..<Int(nbCol) {
            for y in 0..<Int(nbRow) {
                items[x][y].setItem(x, y: y, type: ItemType.random())
                println("Create for (\(x), \(y)): (\(items[x][y].x), \(items[x][y].y))")
            }
        }
        //Verify the values
        for x in 0..<Int(nbCol) {
            for y in 0..<Int(nbRow) {
                println("Check for (\(x), \(y)): (\(items[x][y].x), \(items[x][y].y))")
            }
        }
    }
}

項目(部分)是:

class Item: Printable {
    var x: Int
    var y: Int
    var type: ItemType  //Enum

    func setItem(x: Int, y: Int, type: ItemType) {
        self.x = x
        self.y = y
        self.type = type
    }

}

和輸出(問題以紅色顯示):

控制台輸出

如您所見,在“設置值”期間,X和Y是正確的。 但是在檢查時,只有X是正確的,而Y是“卡住”的。 難道我做錯了什么 ?

編輯 :順便說一句,所有項目也具有相同的類型。 對於所有項目,只有X是正確的,Y和類型是“固定的”。

您的問題是repeatedValue:Item()僅計算一次,而不計算count次數。 這意味着給定列的每一行中都具有相同的Item,因此在設置值時,您將覆蓋前一個值-這就是為什么在打印時獲得最后一個值(2)的原因。

您需要使用循環來填充行,而不是使用count / repeatedValue構造。

init(nbCol: Int, nbRow: Int) {
    self.nbCol = nbCol
    self.nbRow = nbRow
    items = Array<Array>()
    //Initialize
    for col in 0..<Int(nbCol) {

         var colArray=Array<Item>()

          for row in 0..<Int(nbRow) {
             colArray.append(Item())
          }

        items.append(colArray)
    }
    //Affect the correct values to each item
    createItems()
}

暫無
暫無

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

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