2010-12-27 9 views

Respuesta

15

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.

+0

Estoy de acuerdo con esto, pero creo que es "lastObject" no "lastElement". – slycrel

+0

¡Bien, ahora tú y yo estamos de acuerdo! Eso es lo que recibo por no consultar los documentos del SDK para la llamada. –

+0

¡Gran respuesta y justo lo que estaba buscando! –

0

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.

1

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.

0

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.

Cuestiones relacionadas