Tengo un NSArray
y tengo que iterar sobre él en un caso especial al revés, de modo que primero miro el último elemento. Es por motivos de rendimiento: si el último simplemente no tiene sentido, todos los anteriores pueden ignorarse. Entonces me gustaría romper el ciclo. Pero eso no funcionará si repito desde 0 a n. Necesito pasar de n a 0. Tal vez haya un método o función que desconozco, así que no tendría que reinventar la rueda aquí.¿Hay alguna manera fácil de iterar en un NSArray al revés?
Respuesta
para añadir en las otras respuestas, puede utilizar -[NSArray reverseObjectEnumerator]
en combinación con la función de enumeración rápida en Objective-C 2.0 (disponible en Leopard, iPhone):
for (id someObject in [myArray reverseObjectEnumerator])
{
// print some info
NSLog([someObject description]);
}
Fuente con algo más de información: http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.html
¿Esto se considera una enumeración rápida, y es esto más rápido que un ciclo regular de bucle que comienza desde '[myContenido de array] -1 '? ¿Cómo se itera sobre un 'NSString' al revés? – ma11hew28
No tengo ningún enlace aquí en este momento, pero hay un video en algún lugar (podría haber sido una WWDC) en el que un ingeniero de Apple explica qué tan rápido funciona la enumeración y por qué es rápido. Supera tanto a la enumeración de NSArray basada en índices como a los enumeradores de Foundation clásicos y, según el escenario, por mucho. –
Tengo que ejecutar un revés para el bucle en un diccionario, ¿cómo hacerlo? –
[NsArray reverseObjectEnumerator]
De here:
NSEnumerator* myIterator = [myArray reverseObjectEnumerator];
id anObject;
while(anObject = [myIterator nextObject])
{
/* do something useful with anObject */
}
Dado que esto es para el performace, que tiene una serie de opciones y haría bien a probarlos todos para ver cuál funciona mejor.
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
-[NSArray reverseObjectEnumerator]
- Create a reverse copy of the array y luego iterar a través de que normalmente
- Utilice un C estándar para bucle y iniciar y trabajar hacia atrás a través de la matriz.
métodos más extremos (si el rendimiento es supercrítico)
- leer sobre cómo Cacao implementa la enumeración de objetos rápido y crear su propio equivalente a la inversa.
- Usa una matriz C o C++.
Puede haber otros. En ese caso, cualquiera puede agregarlo.
Yo diría que el enumerateObjectsWithOptions: NSEnumerationReverse es la mejor respuesta, especialmente si necesitas saber en qué índice estás. ¡¡¡Gracias!!! –
for (int i = ((int)[array count] - 1); i > -1; i--) {
NSLog(@"element: %@",array[i]);
}
- 1. ¿Hay alguna manera fácil de obtener programáticamente el alfabeto?
- 2. ¿Hay alguna manera de iterar sobre un diccionario?
- 3. ¿Hay un personaje de caridad al revés?
- 4. ¿Hay alguna manera fácil de adjuntar una fuente en Eclipse?
- 5. ¿Hay alguna manera fácil de borrar un formulario ASP.NET?
- 6. En C# .NET 2.0, ¿cuál es una manera fácil de hacer un foreach al revés?
- 7. ¿Hay alguna manera fácil de obtener sombras en OpenGL?
- 8. ¿Hay alguna manera fácil de obtener ServerName en Symfony?
- 9. ¿Hay alguna manera fácil de convertir un int en una matriz de entradas de cada dígito?
- 10. ¿Lee un archivo al revés?
- 11. ¿Hay alguna manera fácil de integrar jshint con netbeans?
- 12. ¿Hay alguna manera fácil de hacer que ScrollViewer sea "hinchable"?
- 13. ¿Hay alguna manera fácil de convertir Criteria a HQL?
- 14. ¿Hay alguna manera fácil de combinar dos valores System.Drawing.Color?
- 15. jQuery encadenando padre(), ¿hay alguna manera más fácil?
- 16. ¿Existe alguna manera fácil de usar InternalsVisibleToAttribute?
- 17. ¿Existe alguna manera fácil de aleatorizar una lista en VB.NET?
- 18. ¿Hay alguna manera fácil de decir en qué línea está un puntero de archivo?
- 19. ¿Hay alguna manera de ingresar automáticamente al ejecutar un shell?
- 20. ¿Hay alguna manera fácil de cambiar un carácter en una cadena en C#?
- 21. ¿Hay alguna manera fácil de quitar HTML de un QString en Qt?
- 22. ¿Hay alguna manera de romper un ciclo foreach en velocidad?
- 23. ¿Cómo puedo agregar objetos CGPoint a un NSArray de la manera más fácil?
- 24. Java: ¿hay alguna manera fácil de seleccionar un subconjunto de una matriz?
- 25. ¿Hay alguna manera fácil de hacer un montón mínimo en C++?
- 26. ¿Hay alguna manera fácil de eliminar un depósito de artefactos mercurial?
- 27. ¿Hay alguna manera de iterar un número específico de veces sin introducir una variable innecesaria?
- 28. Necesito iterar en una lista de Python al revés lo más rápido posible
- 29. ¿Hay alguna manera de acceder al hardware directamente en Python?
- 30. ¿Hay alguna manera de obtener datos ortográficos de un NSString?
"¿Cómo puedo invertir un NSArray en Objective-C?" es una pregunta completamente diferente. – Nestor
Swift: http://stackoverflow.com/questions/24508592/how-to-iterate-for-loop-in-reverse-order-in-swift – Suragch