Is there an easy way to iterate over an NSArray backwards?
Solution 1:
To add on the other answers, you can use -[NSArray reverseObjectEnumerator]
in combination with the fast enumeration feature in Objective-C 2.0 (available in Leopard, iPhone):
for (id someObject in [myArray reverseObjectEnumerator])
{
// print some info
NSLog([someObject description]);
}
Source with some more info: http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.html
Solution 2:
Since this is for performace, you have a number of options and would be well advised to try them all to see which works best.
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
-[NSArray reverseObjectEnumerator]
- Create a reverse copy of the array and then iterate through that normally
- Use a standard C for loop and start and work backwards through the array.
More extreme methods (if performance is super-critical)
- Read up on how Cocoa implements fast object enumeration and create your own equivalent in reverse.
- Use a C or C++ array.
There may be others. In which case, anyone feel free to add it.
Solution 3:
From here:
NSEnumerator* myIterator = [myArray reverseObjectEnumerator];
id anObject;
while( anObject = [myIterator nextObject])
{
/* do something useful with anObject */
}