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