Есть ли простой способ итерации по NSArray назад?
У меня есть NSArray
и придется перебирать его в особом случае назад, так что я сначала посмотрю на последний элемент. Это из соображений производительности: если последний просто не имеет смысла, все предыдущие можно игнорировать. Поэтому я хотел бы разорвать петлю. Но это не будет работать, если я повторяю вперед от 0 до n. мне нужно перейти от n к 0. Может быть, есть метод или функция, о которых я не знаю, поэтому мне не придется заново изобретать колесо здесь.
5 ответов:
чтобы добавить другие ответы, вы можете использовать
-[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
Так как это для performace, у вас есть несколько вариантов и было бы неплохо попробовать их все, чтобы увидеть, что работает лучше всего.
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
-[NSArray reverseObjectEnumerator]
- создать обратную копию массива а затем повторите это нормально
- используйте стандартный C для цикла и начать и работать в обратном направлении через массив.
более экстремальные методы (если производительность super-critical)
- читайте о том, как Cocoa реализует быстрое перечисление объектов и создает свой собственный эквивалент в обратном порядке.
- используйте массив C или C++.
могут быть и другие. В этом случае, любой желающий может добавить его.
С здесь:
NSEnumerator* myIterator = [myArray reverseObjectEnumerator]; id anObject; while( anObject = [myIterator nextObject]) { /* do something useful with anObject */ }