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.

War es hilfreich?

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]);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top