Gibt es eine einfache Möglichkeit, nach hinten eine NSArray iterieren?
-
20-08-2019 - |
Frage
Ich habe eine NSArray
bekommen haben und nach hinten über sie in einem speziellen Fall zu durchlaufen, so dass ich zum ersten Mal auf dem letzten Element aussehen. Es ist aus Performance-Gründen: Wenn die letzte gerade keinen Sinn macht, werden alle vorherigen ignoriert werden kann. So würde Ich mag die Schleife brechen. Aber das wird nicht funktionieren, wenn ich von 0 bis n vorwärts durchlaufen. Ich muß von n auf 0 Vielleicht gehen gibt es eine Methode oder Funktion, die ich weiß nicht, über, so müsste ich hier nicht das Rad neu zu erfinden.
Lösung
auf den anderen Antworten hinzuzufügen, Sie -[NSArray reverseObjectEnumerator]
in Kombination mit der schnellen Enumeration-Funktion in Objective-C 2.0 verwenden können (erhältlich in Leopard, iPhone):
for (id someObject in [myArray reverseObjectEnumerator])
{
// print some info
NSLog([someObject description]);
}
Quelle mit weiteren Informationen: http://cocoawithlove.com/2008/ 05 / fast-Enumeration-clarifications.html
Andere Tipps
Da dies für Performace ist, haben Sie eine Reihe von Optionen und würden gut beraten, zu versuchen, sie alle zu sehen, was am besten funktioniert.
-
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
-
-[NSArray reverseObjectEnumerator]
- Erstellen einer Reverse-Kopie des Arrays und dann durch die normalerweise iterieren
- Verwenden eines Standard-C-Schleife und beginnen und rückwärts durch das Array arbeiten.
Weitere extreme Methoden (wenn die Leistung ist super-kritische)
- Lesen Sie, wie Cocoa schnell Objekt Aufzählung implementiert und Ihre eigene Äquivalent in umgekehrten erstellen.
- Verwenden eines C- oder C ++ Array.
Es kann andere sein. In diesem Fall kann jeder fühlt sich frei, um es hinzuzufügen.
hier :
NSEnumerator* myIterator = [myArray reverseObjectEnumerator];
id anObject;
while( anObject = [myIterator nextObject])
{
/* do something useful with anObject */
}
[NsArray reverseObjectEnumerator]
for (int i = ((int)[array count] - 1); i > -1; i--) {
NSLog(@"element: %@",array[i]);
}