2012-08-25 21 views
10

Considere la siguiente declaración:Objective-C bucle for-in Obtener Índice

for (NSString *string in anArray) { 

    NSLog(@"%@", string); 
} 

¿Cómo puedo obtener el índice de string en anArray sin necesidad de utilizar un bucle tradicional for y sin comprobar el valor de string con todos los objetos en anArray?

Respuesta

34

Se garantiza que las matrices iterarán en el orden de los objetos. Por lo tanto:

NSUInteger index = 0; 
for(NSString *string in anArray) 
{ 
    NSLog(@"%@ is at index %d", string, index); 

    index++; 
} 

Como alternativa, utilice el empadronador bloque:

[anArray 
    enumerateObjectsUsingBlock: 
     ^(NSString *string, NSUInteger index, BOOL *stop) 
     { 
      NSLog(@"%@ is at index %d", string, index); 
     }]; 
-1

probar esto.

for (NSString *string in anArray) 
{ 
    NSUInteger index = [anArray indexOfObject:string]; 
} 
+4

'- indexOfObject' es una operación' O (n) ', por lo que este algoritmo es' O (n^2) '. Es estrictamente peor que incrementar un índice en cada iteración o usar '- enumerateObjectsUsingBlock:', que siguen siendo 'O (n)'. –

+4

Esta respuesta es ** incorrecta **. Si 'anArray' contiene duplicados, el' index' de los elementos duplicados sería incorrecto. – Pang

Cuestiones relacionadas