是否有一种简单的方法可以向后迭代NSArray?

Tha*_*nks 67 objective-c nsarray

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

Sij*_*der 190

要添加其他答案,您可以-[NSArray reverseObjectEnumerator]结合Objective-C 2.0中的快速枚举功能(Leopard,iPhone中提供):

for (id someObject in [myArray reverseObjectEnumerator])
{
    // print some info
    NSLog([someObject description]);
}
Run Code Online (Sandbox Code Playgroud)

来源更多信息:http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.html

  • @AshwinG你的问题没有意义,因为`NSDictionary没有'订单'.您可以按任何实际顺序枚举它们,除非您首先订购键/值. (4认同)

Mik*_*lah 17

由于这是为了性能,你有很多选择,我们建议大家尝试一下,看看哪种方法效果最好.

  • [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
  • -[NSArray reverseObjectEnumerator]
  • 创建数组的反向副本,然后正常迭代
  • 使用标准C for循环并在数组中向后启动和后退.

更极端的方法(如果性能超级关键)

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

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


Naa*_*aff 12

这里:

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

 while( anObject = [myIterator nextObject])
 {
     /* do something useful with anObject */
 }
Run Code Online (Sandbox Code Playgroud)