Ich habe eine NSArray
und muss darüber in einem speziellen Fall rückwärts iterieren, so dass ich zuerst auf das letzte Element schaue. Es ist aus Performance-Gründen: Wenn die letzte nur keinen Sinn macht, können alle vorherigen ignoriert werden. Also würde ich gerne die Schleife brechen. Aber das wird nicht funktionieren, wenn ich von 0 nach n iteriere. Ich muss von n auf 0 gehen. Vielleicht gibt es eine Methode oder Funktion, von der ich nichts weiß, also müsste ich das Rad hier nicht neu erfinden.Gibt es eine einfache Möglichkeit, über ein NSArray rückwärts zu iterieren?
Antwort
auf den anderen Antworten hinzuzufügen, Sie -[NSArray reverseObjectEnumerator]
in Kombination mit der schnellen Enumeration-Funktion in Objective-C 2.0 (erhältlich in Leopard, iPhone) verwenden können:
for (id someObject in [myArray reverseObjectEnumerator])
{
// print some info
NSLog([someObject description]);
}
Quelle mit einem paar mehr Info: http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.html
Wird dies als schnelle Aufzählung betrachtet und ist dies schneller als eine reguläre c for-Schleife, die mit '[myArray count] -1' beginnt? Wie iteriert man über einen 'NSString' rückwärts? – ma11hew28
Ich habe momentan keine Links hier, aber irgendwo gibt es ein Video (könnte eine WWDC gewesen sein), wo ein Apple Ingenieur erklärt, wie schnell die Enumeration funktioniert und warum sie schnell ist. Es übertrifft sowohl die indexbasierte NSArray-Enumeration als auch die klassischen Foundation-Enumeratoren und, je nach Szenario, sehr viel. –
Ich muss eine umgekehrte Schleife für ein Wörterbuch ausführen, wie geht das? –
[NsArray reverseObjectEnumerator]
Von here:
NSEnumerator* myIterator = [myArray reverseObjectEnumerator];
id anObject;
while(anObject = [myIterator nextObject])
{
/* do something useful with anObject */
}
Da dies für performace, Ihnen eine Reihe von Optionen zur Verfügung und sind gut beraten, sie alle zu sehen, welche am besten funktioniert, um zu versuchen.
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
-[NSArray reverseObjectEnumerator]
- Create a reverse copy of the array und dann durchlaufen, die normalerweise
- Verwendung eines Standard-C-Schleife und beginnen und rückwärts durch das Array arbeiten.
Extremere Methoden (wenn die Leistung super-kritisch)
- Lesen Sie, wie Cocoa implementiert schnelles Objekt Aufzählung und Ihre eigene Äquivalent in umgekehrten erstellen.
- Verwenden Sie ein C- oder C++ - Array.
Es kann andere geben. In diesem Fall kann jeder es hinzufügen.
Ich würde sagen, dass die enumerateObjectsWithOptions: NSEnumerationReverse ist die beste Antwort, vor allem wenn Sie müssen wissen, auf welchem Index Sie sind. Vielen Dank!!! –
for (int i = ((int)[array count] - 1); i > -1; i--) {
NSLog(@"element: %@",array[i]);
}
- 1. Gibt es eine Möglichkeit, über ein Wörterbuch zu iterieren?
- 2. Gleichzeitigkeit iterieren über NSArray
- 3. Gibt es eine Möglichkeit, ein Kalenderereignis über UIActivityViewController zu senden?
- 4. Gibt es eine einfache Möglichkeit, das Alphabet programmatisch zu erhalten?
- 5. Gibt es eine einfache Möglichkeit, ein ASP.NET-Formular zu löschen?
- 6. Gibt es eine einfache Möglichkeit, Kriterien in HQL zu konvertieren?
- 7. Gibt es eine generische Möglichkeit, über eine bestimmte Variable in einer Gruppe von Objekten zu iterieren?
- 8. Gibt es eine einfache Möglichkeit, Routing in JSF zu implementieren?
- 9. Gibt es eine einfache Möglichkeit, InternalsVisibleToAttribute zu verwenden?
- 10. Gibt es eine einfache Möglichkeit, Hoptoad mit CakePHP zu verwenden?
- 11. Gibt es eine einfache Möglichkeit, alle gängigen Modulerweiterungen zu erhalten?
- 12. Gibt es eine Standardfunktion, um über Basisklassen zu iterieren?
- 13. Gibt es eine einfache Möglichkeit, einen Code TextBox zu erstellen?
- 14. Gibt es eine einfache Möglichkeit, mit Basscss zu beginnen?
- 15. Gibt es eine einfache Möglichkeit, jshint mit Netbeans zu integrieren?
- 16. Gibt es eine einfache Möglichkeit, Bilder schräg zu stellen?
- 17. Gibt es eine einfache Möglichkeit, JavaScript in WebStorm zu bewerten?
- 18. Gibt es eine einfache Möglichkeit, zwei System.Drawing.Color-Werte zu mischen?
- 19. Gibt es eine einfache Möglichkeit, Openshift Autoscaling zu testen?
- 20. Gibt es eine einfache Möglichkeit, Benutzer von Facebook zu erhalten?
- 21. Gibt es eine einfache Möglichkeit, Gulture mit Django zu verwenden?
- 22. Gibt es eine einfache Möglichkeit, Bildabmessungen in Ruby zu erhalten?
- 23. Gibt es eine einfache Möglichkeit, mit Open MPI zu klingeln?
- 24. Gibt es eine einfache Möglichkeit, den Flex Preloader zu verstecken?
- 25. Gibt es eine einfache Möglichkeit, TypeScript-Definitionen zu installieren?
- 26. Gibt es eine einfache Möglichkeit, einen Verweis auf eine beliebige Instanzvariable in einem Array zu speichern?
- 27. Gibt es eine Möglichkeit, Creeps zu löschen?
- 28. Gibt es eine Möglichkeit, mit OneNote über Code zu kommunizieren?
- 29. Gibt es eine einfache Möglichkeit, ein int in ein Array von Ints jeder Ziffer zu verwandeln?
- 30. Eine einfache Möglichkeit, über alle eindeutigen Paare in einer Sammlung zu iterieren
"Wie kann ich ein NSArray in Objective-C umkehren?" ist eine ganz andere Frage. – Nestor
Swift: http://stackoverflow.com/questions/24508592/how-to-iterate-for-loop-in-reverse-order-in-swift – Suragch