¿Cuál es la mejor manera de saber cuándo he llegado al último objeto de una matriz cuando uso la enumeración rápida? ¿Hay una forma mejor que incrementar un int y luego compararlo con la longitud del array?Objetivo C: ¿El último objeto cuando se usa la enumeración rápida?
Respuesta
Si usted está comenzando con una serie de salir el último elemento (hay' s una llamada específica para eso) y compara cada elemento que obtienes en el enumerador con eso. Algo así como:
id lastEl = [myArray lastObject];
for (id anEl in myArray)
{
if (anEl == lastEl)
..... // do the last thing
}
El costo comparación es la misma que con el contador, pero entonces usted no tiene el costo de incrementar el contador o errores que invariablemente surgen cuando se olvida de incrementar el contador.
No creo que haya una forma (simple) de hacer esto: es una de las ventajas de usar la enumeración rápida. Como tal, cuando necesite conocer el índice del elemento sobre el que está enumerando, deberá crear un número entero tal como lo sugiere.
Dicho esto, usted todavía se beneficia del hecho de que no se puede ir fuera de los límites cuando se utiliza un empadronador rápido, etc.
Típicamente, rápida enumeración significa que no se está utilizando un contador de ...
la otra forma es sin contador es ...
NSEnumerator *enumerator = [objectSet objectEnumerator];
id setObject;
while ((setObject = [enumerator nextObject]) != nil)
{
...
}
Si la prueba de rendimiento es responsable here, no hay mucha diferencia de rendimiento entre la enumeración rápida y la enumeración de bloques. O bbum dijo here "La enumeración basada en bloques permite que la clase de recopilación enumere los contenidos tan rápido como el recorrido más rápido del formato de almacenamiento nativo."
Entonces sugeriré usar la enumeración de bloques para que pueda obtener el índice y el objeto al mismo tiempo, y puedes hacer la comparación.
También puede utilizar la enumeración con bloques:
[myArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
BOOL isLastObject = idx == [myArray count]-1;
if (isLastObject){
//...
}
}];
Si sabe qué tipo de objetos de su matriz contiene es mejor sustituir id
con la clase apropiada.
- 1. ¿Cómo se detiene la enumeración rápida?
- 2. Objetivo c "para cada uno" (enumeración rápida) - evaluación de la colección?
- 3. Objetivo C - Eliminar el último carácter de la cadena
- 4. ¿Por qué Apple usa el objetivo C?
- 5. Enumeración rápida Vs NSEnumerator en Objective-C
- 6. Objective-C enumerateUsingBlock versus enumeración rápida?
- 7. Objetivo C iPhone cuando establecer referencias de objeto nulo
- 8. ¿Puedo utilizar una enumeración como propiedad en el Objetivo C
- 9. Mantenga un registro de índice en la enumeración rápida
- 10. Objetivo "Por último" para MSBuild
- 11. Enumeración rápida en un NSIndexSet
- 12. Enumeración rápida en NSArray de diferentes tipos
- 13. ¿Cómo se usa `to_sql` en AREL cuando se usa` average() `?
- 14. Objetivo c - Propiedad de objeto único NSMutableSet
- 15. Objetivo C: ¿cuándo debe "typedef" preceder a "enum" y cuándo se debe nombrar una enumeración?
- 16. usar la sal cuando se usa SimpleMembershipProvider
- 17. C# Copiando la enumeración de un objeto a otro
- 18. ¿Cómo se mapea la memoria cuando se usa la horquilla?
- 19. implementando el operador == cuando se usa la herencia
- 20. Uso de la biblioteca c/C++ que usa la red para el objetivo de la aplicación iphone c
- 21. Fecha último objeto modificado
- 22. Cómo usar NSArray del objeto NSArray en el objetivo c?
- 23. objetivo-c: cómo actualizar el objeto en NSMutableArray?
- 24. ¿División de enteros más rápida cuando se conoce el denominador?
- 25. Ctrl-C no funciona cuando se usa threading.Timer
- 26. El primer hijo de CSS y el último hijo no funcionan cuando se usa en el mismo elemento
- 27. Ajuste del objetivo C en el objetivo C++/C++
- 28. Declaración preparada en ASP.Net C# cuando se usa SQL Server
- 29. Ejemplo de adopción/implementación de enumeración rápida para mi clase?
- 30. ¿Cómo se duplica el artículo cuando se usa jquery ordenable?
Estoy de acuerdo con esto, pero creo que es "lastObject" no "lastElement". – slycrel
¡Bien, ahora tú y yo estamos de acuerdo! Eso es lo que recibo por no consultar los documentos del SDK para la llamada. –
¡Gran respuesta y justo lo que estaba buscando! –