我有一个NSArray
需要迭代,但在某些情况下需要反向迭代,以便首先查看最后一个元素。这是出于性能考虑:如果最后一个元素没有意义,那么所有之前的元素都可以被忽略。因此,我想中断循环。但是,如果我从0到n正向迭代,那将行不通。我需要从n到0进行迭代。也许有一种我不知道的方法或函数,这样我就不必重新发明轮子了。
我有一个NSArray
需要迭代,但在某些情况下需要反向迭代,以便首先查看最后一个元素。这是出于性能考虑:如果最后一个元素没有意义,那么所有之前的元素都可以被忽略。因此,我想中断循环。但是,如果我从0到n正向迭代,那将行不通。我需要从n到0进行迭代。也许有一种我不知道的方法或函数,这样我就不必重新发明轮子了。
除了其他答案外,您可以在Objective-C 2.0(Leopard、iPhone可用)中结合快速枚举功能使用-[NSArray reverseObjectEnumerator]
:
for (id someObject in [myArray reverseObjectEnumerator])
{
// print some info
NSLog([someObject description]);
}
参考资料: http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.html
[myArray count]-1
开始的普通C for循环更快?如何反向迭代一个 NSString
? - ma11hew28NSDictionary
没有 "顺序" 这个概念。除非你先对键/值进行排序,否则你可以按任意顺序枚举它们。 - mattsven由于这是与性能相关的内容,您有多种选择,并且最好尝试它们以查看哪种效果最佳。
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
-[NSArray reverseObjectEnumerator]
如果性能非常关键,则可以采用以下更极端方法:
可能还有其他方法,请随意添加。
来自这里:
NSEnumerator* myIterator = [myArray reverseObjectEnumerator];
id anObject;
while( anObject = [myIterator nextObject])
{
/* do something useful with anObject */
}
for (int i = ((int)[array count] - 1); i > -1; i--) {
NSLog(@"element: %@",array[i]);
}
[NsArray reverseObjectEnumerator]