2009-07-12 13 views
28

¿Hay una manera más eficiente de agregar objetos a un diccionario de NSMutable que la iteración simple?NSMutable Dictionary agregando objetos

Ejemplo:

// Create the dictionary 

NSMutableDictionary *myMutableDictionary = [NSMutableDictionary dictionary];  

// Add the entries 

[myMutableDictionary setObject:@"Stack Overflow" forKey:@"http://stackoverflow.com"]; 
[myMutableDictionary setObject:@"SlashDotOrg" forKey:@"http://www.slashdot.org"]; 
[myMutableDictionary setObject:@"Oracle" forKey:@"http://www.oracle.com"]; 

Sólo por curiosidad, estoy seguro de que esta es la forma en que se tiene que hacer.

Respuesta

15

Si usted tiene todos los objetos y las claves de antemano puede inicializar utilizando NSDictionary de:

dictionaryWithObjects:forKeys: 

Por supuesto que esto le dará diccionario inmutable no mutable. Depende de su uso que uno necesita, puede obtener una copia mutable de NSDictionary pero parece más fácil simplemente utilizar el código original en ese caso:

NSDictionary * dic = [NSDictionary dictionaryWith....]; 
NSMutableDictionary * md = [dic mutableCopy]; 
... use md ... 
[md release]; 
+0

Gracias por la segunda opinión. Solo quería asegurarme de que no me faltaba nada y ver si había algo un poco más eficiente/elegante. – djt9000

+0

También estaba buscando una opción para inicializar NSMutableDictionary con objetos y claves como lo que puedes hacer para NSDictionary pero no puedo encontrar nada ... – stefanB

20
NSDictionary *entry = [NSDictionary dictionaryWithObjectsAndKeys: 
    [NSNumber numberWithDouble:acceleration.x], @"x", 
    [NSNumber numberWithDouble:acceleration.y], @"y", 
    [NSNumber numberWithDouble:acceleration.z], @"z", 
    [NSDate date], @"date", 
    nil]; 
+0

que me ayudó ty :) – grilix

8

me permite manejar cierta información a las personas que están comenzando.

Es posible crear un NSDictionary con una sintaxis más amigable con objective-c literals:

NSDictionary *dict = @{ 
    key1 : object1, 
    key2 : object2, 
    key3 : object3 }; 
+0

¿Deberías terminar la lista con un nil? – vvMINOvv

+2

@vvMINOvv No es necesario :). Lo mismo con NSArrays literales :) –

0
NSMutableDictionary *example = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@5,@"burgers",@3, @"milkShakes",nil]; 

Los objetos vienen antes de las llaves.