2012-02-28 28 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數組中的位置報告。我不知道這些是否意味着是相同的數組或不。但是,如果它們是不同的數組,那麼你是否期望對象的順序相同?