Swift - динамический массив структур - PullRequest
0 голосов
/ 23 октября 2018

У меня есть структура:

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, я получаю сообщение об ошибке:

Неустранимая ошибка: индекс выходит за пределы диапазона

Как объявить и инициализировать динамический массив структур в swift?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вы создаете только один элемент типа "Deque" в массиве "burst" с помощью этой команды:

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

Вот почему при попытке получить доступ к массиву "burst" с i> 0,это падает.Вам нужно инициализировать новый объект 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)
    }
  }
}
0 голосов
/ 23 октября 2018
var burst = [Deque<Int>()]

Здесь burst объявляется массивом объекта 1 Deque.Вы пытаетесь получить доступ к burst[i], где i больше 0, что находится за пределами диапазона burst.

Вы можете использовать инициализатор Array init(repeating:count:) ( doc )вот так:

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