有没有一种简单的方法可以反向迭代 NSArray?

我得到了一个 NSArray,并且必须在一个特殊的情况下反向迭代它,这样我就可以首先查看最后一个元素。这是出于性能方面的原因: 如果最后一个选项没有意义,那么前面的所有选项都可以忽略。所以我想打破这个循环。但是如果从0到 n 迭代就不行了,我需要从 n 到0。也许有一个方法或函数我不知道,所以我不必重新发明车轮在这里。

26894 次浏览
[NsArray reverseObjectEnumerator]

来自 给你:

 NSEnumerator* myIterator = [myArray reverseObjectEnumerator];
id anObject;


while( anObject = [myIterator nextObject])
{
/* do something useful with anObject */
}

因为这是为了提高性能,所以您有很多选项,建议您都尝试一下,看看哪个最好。

  • [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
  • -[NSArray reverseObjectEnumerator]
  • 创建数组 的反向副本,然后正常迭代
  • 循环使用标准的 C 语言,通过数组向后启动和操作。

更极端的方法(如果性能是超临界的)

  • 阅读 Cocoa 如何实现快速对象枚举,并反过来创建自己的等价物。
  • 使用 C 或 C + + 数组。

可能还有其他的,这种情况下,任何人都可以随意添加。

要添加其他答案,您可以结合使用 -[NSArray reverseObjectEnumerator]和 Objective-C 2.0中的快速枚举特性(可在 Leopard,iPhone 中获得) :

for (id someObject in [myArray reverseObjectEnumerator])
{
// print some info
NSLog([someObject description]);
}

资料来源: http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.html

for (int i = ((int)[array count] - 1); i > -1; i--) {
NSLog(@"element: %@",array[i]);
}