2010-12-27 8 views

risposta

15

Se si inizia con una serie uscire l'ultimo elemento (c'e' s una chiamata specifica per quello) e confrontare ogni elemento che si ottiene nell'enumeratore contro quello. Qualcosa di simile:

id lastEl = [myArray lastObject]; 

for (id anEl in myArray) 
{ 
    if (anEl == lastEl) 
    ..... // do the last thing 
} 

Il costo confronto è lo stesso con il contatore, ma poi non si ha il costo di incrementare il contatore o errori che inevitabilmente sorgono quando si dimentica di incrementare il contatore.

+0

Sono d'accordo con questo, ma credo che sia "lastObject" non "lastElement". – slycrel

+0

Bene, ora tu e io siamo d'accordo! Questo è quello che ottengo per non controllare i documenti dell'SDK per la chiamata. –

+0

Ottima risposta e proprio quello che stavo cercando! –

0

Non credo che ci sia un modo (semplice) per farlo: è uno dei compromessi dell'utilizzo dell'enumerazione veloce. Pertanto, quando è necessario essere a conoscenza dell'indice dell'elemento su cui si sta enumerando, sarà necessario creare un numero intero come suggerito.

Detto questo, ci si può comunque trarre vantaggio dal fatto che non si può andare fuori dai limiti quando si utilizza un enumeratore veloce, ecc

1

Se il test delle prestazioni è responsabile here, non c'è molta differenza di prestazioni tra l'enumerazione veloce e l'enumerazione dei blocchi. O bbum said here "L'enumerazione basata su blocchi consente alla classe di raccolta di enumerare i contenuti tanto velocemente quanto il più veloce traversamento del formato di archiviazione nativo."

Quindi suggerirò di utilizzare l'enumerazione dei blocchi in modo da ottenere indice e oggetto allo stesso tempo tempo, e puoi fare il confronto.

0

È anche possibile utilizzare l'enumerazione con blocchi:

[myArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
    BOOL isLastObject = idx == [myArray count]-1; 
    if (isLastObject){ 
     //... 
    } 
}]; 

Se si sa quale tipo di oggetti vostro array contiene è meglio sostituire id con la classe corretta.

Problemi correlati