什么可能导致for循环不递增然后递增2?

时间:2012-02-28 14:50:35

标签: objective-c

我不确定这是怎么可能的,但我有一个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被完全跳过。

关于可能导致这种情况的任何想法?

我完全糊涂了。

提前致谢, 杰森

2 个答案:

答案 0 :(得分:3)

对象在数组中出现两次,因此indexOfObject在索引78178处找到索引为78179的元素。

换句话说,你有这种情况:

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

此外,你没有搜索你正在迭代的同一个数组,这也可能与它有关。

由于报告的位置非常高,我会尝试找到比简单数组更好的数据结构。为了报告78178的位置,它必须将对象与前面的78177元素进行比较,这样只需要花费越来越多的时间进一步进入数组。

答案 1 :(得分:1)

从发布的代码中,您正在迭代AISMessage数组中的disarray个对象,但是您正在报告aisArray数组中对象的位置。

我不知道这些是否是同一个数组。但是如果它们是不同的数组,那么你期望对象的顺序是一样的吗?