2012-08-25 8 views
10

Si consideri la seguente dichiarazione:Objective-C per-In Loop Get Indice

for (NSString *string in anArray) { 

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

Come posso ottenere l'indice di string in anArray senza utilizzare un tradizionale for ciclo e senza controllare il valore di string con ogni oggetto in anArray?

risposta

34

Gli array sono garantiti per iterare nell'ordine degli oggetti. Quindi:

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

    index++; 
} 

In alternativa, utilizzare il blocco enumeratore:

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

Prova questa.

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

'- indexOfObject' è un'operazione' O (n) ', quindi questo algoritmo è' O (n^2) '. È decisamente peggio che incrementare un indice su ogni iterazione o usando '- enumerateObjectsUsingBlock:', entrambi i quali sono ancora 'O (n)'. –

+4

Questa risposta è ** errata **. Se 'anArray' contiene duplicati,' index' per gli elementi duplicati non sarebbe corretto. – Pang

Problemi correlati