У меня есть NSArray
и придется перебирать его в специальном случае назад, чтобы я сначала посмотрел на последний элемент. Это по соображениям производительности: если последнее просто не имеет смысла, все предыдущие можно игнорировать. Поэтому я хотел бы разбить цикл. Но это не сработает, если я перейду от 0 до n. Мне нужно перейти от n к 0. Возможно, есть способ или функция, о которых я не знаю, поэтому мне не пришлось бы изобретать колесо здесь.Есть ли простой способ перебрать NSArray назад?
ответ
Чтобы добавить на другие ответы, вы можете использовать -[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
Рассматривается ли это быстрое перечисление, и это быстрее, чем обычный цикл c, который начинается с '[myArray count] -1'? Как вы повторяете «NSString» назад? – ma11hew28
У меня сейчас нет ссылок, но есть где-то видео (возможно, это WWDC), где инженер Apple объясняет, как быстро работает перечисление и почему это быстро. Он превосходит индексирование NSArray, основанное на индексах, и классические перечисления фонда и, в зависимости от сценария, много. –
Мне нужно запустить обратный цикл для словаря, как это сделать? –
[NsArray reverseObjectEnumerator]
here От:
NSEnumerator* myIterator = [myArray reverseObjectEnumerator];
id anObject;
while(anObject = [myIterator nextObject])
{
/* do something useful with anObject */
}
Поскольку это для Performace, у вас есть несколько вариантов, и можно было бы посоветовать попробовать их все, чтобы увидеть, что работает лучше всего.
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
-[NSArray reverseObjectEnumerator]
- Create a reverse copy of the array, а затем итерации, которые обычно
- использовать стандартный C для цикла и начать работать в обратном направлении и через массив.
Более экстремальные методы (если производительность супер-критический)
- Читайте о том, как какао реализует быстрый объект перечисления и создать свой собственный эквивалент в обратном направлении.
- Используйте массив C или C++.
Могут быть и другие. В этом случае любой пользователь может добавить его.
Я бы сказал, что наилучшим ответом является enumerateObjectsWithOptions: NSEnumerationReverse, особенно если вам нужно знать, в каком индексе вы находитесь. Благодаря!!! –
for (int i = ((int)[array count] - 1); i > -1; i--) {
NSLog(@"element: %@",array[i]);
}
- 1. Есть ли способ получить простой обзор NSArray?
- 2. Есть ли способ перебрать возвращаемое значение np.where? (?)
- 3. Есть ли простой способ программно получить алфавит?
- 4. Есть ли простой способ сделать ScrollViewer "bouncy"?
- 5. Есть ли способ перебрать все экземпляры jwplayer, когда число неизвестно?
- 6. Самый простой способ получить NSArray для NSManagedObject
- 7. Есть ли способ перемотки назад или назад при использовании JsonReader?
- 8. Самый простой способ превратить NSMutableDictionary в NSArray
- 9. Цикл назад через NSArray
- 10. Есть ли более простой способ реализовать openid?
- 11. Есть ли простой способ дедуплировать таблицу Hive?
- 12. Есть ли более простой способ написать это?
- 13. Есть ли простой способ установить определения TypeScript?
- 14. Есть ли простой способ скопировать состояние QPainter?
- 15. Есть ли простой способ выбора в linq
- 16. Есть ли простой способ обратного преобразования шаблона?
- 17. Есть ли простой способ сделать код TextBox?
- 18. Есть ли простой способ использовать InternalsVisibleToAttribute?
- 19. Есть ли более простой способ кодировать это?
- 20. Есть ли простой способ сделать изображения наклонными?
- 21. Есть ли простой способ очистить форму ASP.NET?
- 22. mocking in go. Есть ли простой способ?
- 23. Есть ли простой способ сделать document.getElementById упрощенным?
- 24. XML - Есть ли более простой способ
- 25. Есть ли простой способ автоматизировать снятие скриншотов?
- 26. Есть ли простой способ создания похожих цветов?
- 27. Есть ли простой способ создания инициализированного массива?
- 28. Есть ли более простой способ разблокировать массив?
- 29. Есть ли простой способ настроить QProgressBar?
- 30. Есть ли простой способ шифрования java-объекта?
«Как я могу изменить NSArray в Objective-C?» это совершенно другой вопрос. – Nestor
Swift: http://stackoverflow.com/questions/24508592/how-to-iterate-for-loop-in-reverse-order-in-swift – Suragch