72

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

4

5 回答 5

196

要添加其他答案,您可以-[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

于 2009-05-10T00:16:19.130 回答
17

由于这是出于性能考虑,因此您有多种选择,建议您全部尝试一下,看看哪种效果最好。

  • [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
  • -[NSArray reverseObjectEnumerator]
  • 创建数组的反向副本,然后正常迭代
  • 使用标准 C for 循环并开始并通过数组向后工作。

更极端的方法(如果性能非常关键)

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

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

于 2009-05-09T23:45:00.403 回答
12

这里

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

 while( anObject = [myIterator nextObject])
 {
     /* do something useful with anObject */
 }
于 2009-05-09T22:24:34.873 回答
2
[NsArray reverseObjectEnumerator]
于 2009-05-09T22:21:22.650 回答
2
for (int i = ((int)[array count] - 1); i > -1; i--) {
    NSLog(@"element: %@",array[i]);
}
于 2018-03-05T08:03:15.723 回答