Что может заставить цикл for не увеличивать, а затем увеличивать на два? - PullRequest
1 голос
/ 28 февраля 2012

Я не уверен, как это возможно, но у меня цикл for не увеличивается должным образом через массив.

В основном у меня есть:

for (AISMessage *report in disarray){
    NSLog(@"Position of array = %ld\n", [aisArray indexOfObject:report]);
}

В цикле больше кода, но нет ничего странного, если просто отформатировать некоторые данные в объекте и вывести их в файл.

Вывод этих строк будет выглядеть примерно так:

Положение массива = 0

...

Положение массива = 78176

Положение массива = 78177

Положение массива = 78178

Положение массива = 78178

Положение массива = 78180

Положение массива = 78181

...

Положение массива = 490187

По какой-то причине отчет по индексу 78178 читается дважды, а отчет по 78179 полностью пропускается.

Есть идеи, что может вызвать это?

Я совершенно сбит с толку.

Спасибо заранее, Jason

Ответы [ 2 ]

3 голосов
/ 28 февраля 2012

Объект встречается дважды в массиве, поэтому indexOfObject находит элемент по индексу 78179 по индексу 78178.

Другими словами, у вас есть такой случай:

...
[78177] = x
[78178] = y
[78179] = y
[78180] = z
...

Кроме того, вы не выполняете поиск в том же массиве, по которому итерируете, что также может иметь к этому какое-то отношение.

Поскольку указанные позиции очень высоки, я постараюсь найти лучшую структуру данных.чем простой массив.Чтобы сообщить о позиции 78178, ему нужно будет сравнить объект с предыдущими 78177 элементами, и это займет все больше и больше времени, когда вы попадете в массив.

1 голос
/ 28 февраля 2012

Из опубликованного кода вы итерируете по AISMessage объектам в массиве disarray, но вы сообщаете о положении объекта в массиве aisArray.

Я понятия не имею, подразумевается ли это один и тот же массив или нет.Но если это разные массивы, то ожидаете ли вы, что объекты будут в одном и том же порядке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...