2012-02-28 60 views
1

我不知道这是如何可能的,但我有一个for循环不通过数组正确递增。什么可能导致for循环不增加,然后增加2?

基本上我有是:

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

有更多的代码在循环,但没有什么奇怪的只是格式化的一些数据的对象,并将其输出到文件中。

这些线路的输出看起来是这样的:

阵列的位置= 0

...

Posiiton阵列= 78176

Posiiton阵列= 78177

阵列的位置= 78178

Posiiton阵列= 78178

阵列的Posiiton = 78180

阵列的Posiiton = 78181

...

阵列= 490187

的Posiiton出于某种原因,报告在索引78178被读入两次,并且78179的报告被完全跳过。

有关可能导致此问题的任何想法?

我完全困惑。

在此先感谢,杰森

回答

3

在阵列中出现两次的对象,所以在indexOfObject索引78179发现元件在索引78178.

换句话说,你有这样的情况下:

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

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

由于报告的职位如此之高,我会尝试找到比简单数组更好的数据结构。为了报告78178的位置,它必须将该对象与先前的78177个元素进行比较,并且在进一步进入数组中时,这只需要越来越多的时间。

+0

'indexOfObject:'方法通过测试每个项目与消息“isEqual:”是否相等来找到对象的索引。因此,两个项目不仅在它们是相同的对象时相等,而且当它们具有相同的内容时(也取决于“isEqual:”实现)。 – 2012-02-28 15:11:56

+0

谢谢你们......我会研究这种可能性。 – 2012-02-28 15:36:34

1

从公布的代码你遍历disarray数组中AISMessage对象,但你在对象的aisArray数组中的位置报告。我不知道这些是否意味着是相同的数组或不。但是,如果它们是不同的数组,那么你是否期望对象的顺序相同?