我不确定这是怎么可能的,但我有一个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被完全跳过。
关于可能导致这种情况的任何想法?
我完全糊涂了。
提前致谢, 杰森
答案 0 :(得分:3)
对象在数组中出现两次,因此indexOfObject
在索引78178处找到索引为78179的元素。
换句话说,你有这种情况:
...
[78177] = x
[78178] = y
[78179] = y
[78180] = z
...
此外,你没有搜索你正在迭代的同一个数组,这也可能与它有关。
由于报告的位置非常高,我会尝试找到比简单数组更好的数据结构。为了报告78178的位置,它必须将对象与前面的78177元素进行比较,这样只需要花费越来越多的时间进一步进入数组。
答案 1 :(得分:1)
从发布的代码中,您正在迭代AISMessage
数组中的disarray
个对象,但是您正在报告aisArray
数组中对象的位置。
我不知道这些是否是同一个数组。但是如果它们是不同的数组,那么你期望对象的顺序是一样的吗?