Ho uno NSArray
e devo eseguirne l'iterazione in un caso speciale all'indietro, in modo che prima guardi l'ultimo elemento. È per motivi di prestazioni: se l'ultimo non ha senso, tutti i precedenti possono essere ignorati. Quindi mi piacerebbe rompere il loop. Ma questo non funzionerà se itererò avanti da 0 a n. Devo andare da n a 0. Forse c'è un metodo o una funzione che non conosco, quindi non dovrei re-inventare la ruota qui.C'è un modo semplice per iterare su un NSArray all'indietro?
risposta
Per aggiungere alle altre risposte, è possibile utilizzare -[NSArray reverseObjectEnumerator]
in combinazione con la funzione di enumerazione veloce in Objective-C 2.0 (disponibile in Leopard, iPhone):
for (id someObject in [myArray reverseObjectEnumerator])
{
// print some info
NSLog([someObject description]);
}
Fonte con qualche informazione in più: http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.html
Questa è considerata l'enumerazione rapida, ed è più veloce di un normale ciclo c per il ciclo che inizia da '[myArray count] -1'? Come si fa a scorrere su un 'NSString' all'indietro? – ma11hew28
Non ho nessun link qui adesso ma c'è un video da qualche parte (potrebbe essere stato un WWDC) dove un ingegnere Apple spiega come funziona l'enumerazione veloce e perché è veloce. Supera sia l'enumerazione NSArray basata sugli indici sia gli enumeratori classici di Foundation e, a seconda dello scenario, di molto. –
Devo eseguire un reverse per loop su un dizionario, come fare? –
[NsArray reverseObjectEnumerator]
Da here:
NSEnumerator* myIterator = [myArray reverseObjectEnumerator];
id anObject;
while(anObject = [myIterator nextObject])
{
/* do something useful with anObject */
}
Dal momento che questo è per performace, si dispone di una serie di opzioni e farebbe bene a provarli tutti per vedere quale funziona meglio.
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
-[NSArray reverseObjectEnumerator]
- Create a reverse copy of the array e poi iterare che normalmente
- Utilizzare un C standard per ciclo e aprire ritroso attraverso la matrice.
metodi più estremi (se le prestazioni sono super-critica)
- leggere su come cacao implementa oggetto in rapido enumerazione e creare il proprio equivalente in senso inverso.
- Utilizzare un array C o C++.
Ci possono essere altri. In tal caso, chiunque si senta libero di aggiungerlo.
Direi che enumerateObjectsWithOptions: NSEnumerationReverse è la risposta migliore, specialmente se hai bisogno di sapere in quale indice sei. Grazie!!! –
for (int i = ((int)[array count] - 1); i > -1; i--) {
NSLog(@"element: %@",array[i]);
}
- 1. c'è un modo per iterare su costante usato come enum
- 2. Modo corretto per iterare due volte su un elenco?
- 3. perl: iterare su un typeglob
- 4. Un modo semplice per disabilitare un UITextField?
- 5. iterare un array jqlite
- 6. Esiste un modo semplice per randomizzare un elenco in VB.NET?
- 7. Ordina un NSArray in ordine decrescente
- 8. C'è un modo semplice per creare sottodomini su codeigniter?
- 9. Un modo semplice per eseguire test su una gemma?
- 10. C'è un modo per iterare su metodi pubblici all'interno di un ambito di funzione?
- 11. Qual è un modo stabile per iterare su un intervallo con passaggio personalizzato?
- 12. phpinfo: un modo semplice per vederlo?
- 13. Un modo semplice per riordinare le colonne?
- 14. Semplice: oggetto NSArray da raddoppiare?
- 15. modo canonico per randomizzare un NSArray nell'obiettivo C
- 16. Il modo migliore per ordinare un NSArray di oggetti NSDictionary?
- 17. Modo orientato agli oggetti per iterare attraverso un vettore std ::?
- 18. Google Refine: iterare su un dizionario JSON
- 19. C'è un modo semplice per usare InternalsVisibleToAttribute?
- 20. Un modo semplice per popolare questa matrice?
- 21. Un modo semplice per unire i plists?
- 22. Un modo semplice per invertire String
- 23. Un modo semplice per appiattire questo array?
- 24. C'è un modo semplice per impostare nullglob per un glob
- 25. Alla ricerca di un modo per utilizzare un NSArray come presa per un gruppo di pulsanti
- 26. iterare su (voce, altri) in un elenco
- 27. Come iterare su un hash in mustache.js
- 28. Come fare un ordinamento naturale su un NSArray?
- 29. Come posso aggiungere oggetti CGPoint a un NSArray nel modo più semplice?
- 30. Modo Pythonic per iterare su un'istanza collections.Counter() in ordine decrescente?
"Come posso annullare un NSArray in Objective-C?" è una domanda completamente diversa. – Nestor
Swift: http://stackoverflow.com/questions/24508592/how-to-iterate-for-loop-in-reverse-order-in-swift – Suragch