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

时间:2009-05-09 22:16:40

标签: objective-c nsarray

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

5 个答案:

答案 0 :(得分:186)

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

答案 1 :(得分:17)

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

  • [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
  • -[NSArray reverseObjectEnumerator]
  • Create a reverse copy of the array然后通常迭代
  • 使用标准C for循环,然后在阵列中开始向后工作。

更极端的方法(如果表现超级关键)

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

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

答案 2 :(得分:12)

来自here

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

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

答案 3 :(得分:2)

[NsArray reverseObjectEnumerator]

答案 4 :(得分:0)

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