簡體   English   中英

Swift - 動態結構數組

[英]Swift - Dynamic Array of Struct

我有一個結構:

public struct Deque<T> {

    private var array = [T]()

    public var isEmpty: Bool {
        return array.isEmpty
    }

    public var count: Int {
        return array.count
    }

    public mutating func enqueue(_ element: T) { //inserts element at end
        array.append(element)
    }

    public mutating func enqueueFront(_ element: T) { //inserts element at beginning
        array.insert(element, at: 0)
    }
}

我聲明這樣的結構:

var burst = [Deque<Int>()]

我在for循環中將它初始化為:

for i in 0..<9 {
    for j in 0..<10{
    if processes[i][j] != 0{
        burst[i].enqueue(processes[i][j])
    }
  }
}

我能夠成功初始化我的struct的索引0,但是,每當我到索引1時,我都會收到錯誤:

致命錯誤:索引超出范圍

如何在swift中聲明和初始化動態結構數組?

var burst = [Deque<Int>()]

這聲明burst是一個1 Deque對象的數組。 您正在嘗試訪問其中i大於0的burst[i] ,這超出了burst范圍。

您可以使用Array init(repeating:count:)初始化程序( doc ),如下所示:

var burst = Array<Deque<Int>>(repeating: Dequeue<Int>(), count: 10)

您正在使用此命令在“burst”數組中僅創建一個“Deque”類型的元素:

var burst = [Deque<Int>()]  //There is only one element inside the array

這就是為什么當你嘗試訪問i> 0的“burst”數組時,它會崩潰。 您需要在追加到數組之前初始化一個新的Deque對象,然后調用

burst[i]

后來

你可以這樣做:

for i in 0..<9 {
  for j in 0..<10{
    if processes[i][j] != 0{
        var queue = Deque<Int>()
        queue.enqueue(processes[i][j])
        burst.append(queue)
    }
  }
}

暫無
暫無

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

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