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])
}
}
}
我能够成功初始化我的结构的索引 0,但是,每当我到达索引 1 时,我都会收到错误消息:
Fatal error: Index out of range
如何在 swift 中声明和初始化结构的动态数组?
var burst = [Deque<Int>()]
这将 burst
声明为 1 Deque
对象的数组。您正在尝试访问 burst[i]
,其中 i
大于 0,超出了 burst
范围。
您可以像这样使用数组 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)
}
}
}
我有一个结构:
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])
}
}
}
我能够成功初始化我的结构的索引 0,但是,每当我到达索引 1 时,我都会收到错误消息:
Fatal error: Index out of range
如何在 swift 中声明和初始化结构的动态数组?
var burst = [Deque<Int>()]
这将 burst
声明为 1 Deque
对象的数组。您正在尝试访问 burst[i]
,其中 i
大于 0,超出了 burst
范围。
您可以像这样使用数组 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)
}
}
}