2010-09-23 10 views
15

Sé que puede enumerar las claves o valores de NSMutableDictionary usando NSEnumerator. ¿Es posible hacer ambas cosas juntos? Estoy buscando algo similar al empadronador PHP foreach como:Enumerar NSDictionary con claves y objetos, estilo PHP

foreach ($dictionary as $key => $value); 
+0

http://stackoverflow.com/questions/3701126/get-the-array-index-in-for-statement-in-objective-c/3701165#3701165 – RolandasR

Respuesta

56

Tal vez mirar en el método de NSDictionary:

enumerateKeysAndObjectsUsingBlock:(void (^)(id key, id obj, BOOL *stop)) 

Si no está familiarizado con los bloques en C/Objective-C, este es un buen tutorial: http://thirdcog.eu/pwcblocks/

+2

Vi esto y me gustó lo que vi, pero los bloques parecen ser solo iOS 10.6 y 4.0. Todavía soporto 3.1.3 en mi aplicación. – typeoneerror

34
NSDictionary* d = [NSDictionary dictionaryWithObjectsAndKeys:@"obj1",@"key1", 
                  @"obj2",@"key2", 
                  @"obj3",@"key3", 
                  @"obj4",@"key4",nil]; 

for (id key in [d allKeys]) { 
    NSLog(@"%@ - %@",key,[d objectForKey:key]); 
} 

Salidas:

keytest[7880:a0f] key3 - obj3 
keytest[7880:a0f] key1 - obj1 
keytest[7880:a0f] key4 - obj4 
keytest[7880:a0f] key2 - obj2 
+6

Una cosa: el uso de la enumeración rápida en un 'NSDictionary' ya itera las claves, por lo que' [d allKeys] 'no es necesario. – Wevah

+0

ah, es bueno saber – ACBurk

+0

Creo que los bloques son más bonitos, pero esto es lo que terminé haciendo ya que no puedo usar bloques en mi aplicación de iPhone. – typeoneerror

4

ahora mucho más fácil:

for (NSString * key in dict) 
{ 
    id/* or your type */ value = dict[key]; 
    ... 
} 
+1

La respuesta más simple y maravillosa. –

+0

Esta respuesta no responde la pregunta. El OP estaba buscando una manera de enumerar claves y valores juntos. Este enfoque solo enumera las claves y requiere una búsqueda adicional para obtener el valor asociado con cada clave. –

Cuestiones relacionadas