我添加一個對象到的NSMutableArray這樣的:我如何獲得一個對象已被添加到NSMutableArray的索引?
[array addObject:myObject];
我現在想的引用發送到我的地方加入此對象的數組索引的代表。 有一種簡單的方法來找出其中數組中加入我的對象,這樣以後我可以叫
[array objectAtIndex:index]
得到一個參考回到它的指數?
謝謝!
我添加一個對象到的NSMutableArray這樣的:我如何獲得一個對象已被添加到NSMutableArray的索引?
[array addObject:myObject];
我現在想的引用發送到我的地方加入此對象的數組索引的代表。 有一種簡單的方法來找出其中數組中加入我的對象,這樣以後我可以叫
[array objectAtIndex:index]
得到一個參考回到它的指數?
謝謝!
而不是傳遞一個對象的索引(這可能是不正確的)給你的委託,傳遞一個對象本身的引用。如果代理需要數組中對象的索引,則可以使用-indexOfObject:
自己計算出來,如Antonio MG所述。隨着對象的添加,插入和刪除,可變數組中任何給定對象的索引都可能發生變化。計數指數在任何時間段都保持有效就像在櫃檯上放一個果凍三明治 - 它肯定會吸引蟲子。
使用此方法爲:
index = [animalOptions indexOfObject:myObject];
當你已經確切地知道'-addObject:'將要放置新對象的索引時,這可能需要遍歷整個數組。如果你不打算傳遞索引,並且你知道你的數組將會相對較小,並且你的對象的'-equalTo:'和'-hash'方法是健全的,這隻會是有用的。 – 2012-04-19 15:14:21
@JasonCoco從這個問題來看,在添加對象和想知道它的索引之間可能會出現什麼不完全清楚。這可能是後者發生在前者之後,在這種情況下,使用數組的「count」工作(並且對你至少指出一些約束w.r.t.),但是它可能不會。使用'-indexOfObject:'是對OP的問題最直接,最正確的答案。另外,請記住NSArray [並不總是按照您期望的方式行事](http://ridiculousfish.com/blog/posts/array.html),所以這裏的方法可能不會那麼糟糕。 – Caleb 2012-04-19 15:49:50
@Caleb是的,我意識到OP之後發佈了另一條評論。但是,如果是這種情況,OP應該考慮更好的方式來跟蹤這些對象(可能使用索引集並將對象留在數組中,或者如果它們非常大,則將它們交換爲NSNull實例並刪除它們的索引來自索引集)。我知道數組可能並不總是按照我們預期的方式行事,但是我們計劃在最壞的情況下(並且目前陣列實現實際上*的行爲就是這樣,直到它非常非常巨大) – 2012-04-19 16:07:37
最新添加的對象應該是[array count] - 1
指數。你總是可以依靠「count-1」方案來確定最後的索引。
添加對象的索引後直接顯示爲array.count -1
。
爲什麼投票不會投票? – 2012-04-19 15:34:26
您需要序列化訪問可變數組,並且-addObject:
始終將該對象添加到數組的末尾。給定這兩個斷言,你知道下一個添加的對象的索引將始終是數組的當前長度。因此,下列條件將成立:
NSUInteger nextIndex = [array count];
[array addObject:myObject];
// you can now tell your delegates that nextIndex is the index of myObject
是的..但是如果我這樣做:{[array addObject:obj1]; [數組addObject:obj2]; [array removeObject:obj1]; [數組addObject:obj3]}有時obj3的索引可以是0而不是1嗎? – Fervus 2012-04-19 15:16:21
@Fervus是的,你是對的 - 指數變化。不要使用可變數組中對象的索引來引用該對象;改爲使用對象本身的引用。 – Caleb 2012-04-19 15:20:22
@Fervus您需要首先記錄每個索引,否則您將從當前計數開始,然後知道您添加對象到/刪除對象的順序。這就是爲什麼它需要你序列化訪問可變數組。如果你打算將數組轉移很多,那麼你應該找到另一種跟蹤對象位置的方法。 – 2012-04-19 15:26:42
如果您調用addObject,則始終在最後添加對象(因此count-1)。 您可以使用「insertObject:atIndex:」指定一個索引。 對於你的問題:indexOfObject:
while add objects你可以給你的索引也[數組addObject:myObject atIndex:index]; – Charan 2012-04-19 15:10:36
@SreeCharan在'NSMutableArray'中沒有這樣的方法'addObject:atIndex:'。你的意思是'-insertObject:atIndex:'? – 2012-04-19 15:16:25
對,對不起,它的insertObject:atIndex: – Charan 2012-04-19 15:24:57