Cómo agregar a un NSDictionary


Estaba usando un NSMutableArray y me di cuenta de que usar un diccionario es mucho más simple para lo que estoy tratando de lograr.

Quiero guardar una clave como NSString y un valor de int en el diccionario. Cómo se hace esto? En segundo lugar, ¿cuál es la diferencia entre mutable y un diccionario normal?

Author: Eric Leschinski, 2010-07-01

5 answers

Un diccionario mutable se puede cambiar, es decir, puede agregar y eliminar objetos. Un inmutable se fija una vez que se crea.

Crear y añadir:

NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithCapacity:10];
[dict setObject:[NSNumber numberWithInt:42] forKey:@"A cool number"];

Y recuperar:

int myNumber = [[dict objectForKey:@"A cool number"] intValue];
 182
Author: Eiko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-01 17:01:39

Al configurar usarías el método setValue:(id)value forKey:(id)key del objeto NSMutableDictionary:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setValue:[NSNumber numberWithInt:5] forKey:@"age"];

O en Objective-C moderno:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
dict[@"age"] = @5;

La diferencia entre mutable y "normal" es, bueno, mutabilidad. Es decir, puedes alterar el contenido de NSMutableDictionary (y NSMutableArray) mientras que no puedes hacer eso con "normal" NSDictionary y NSArray

 31
Author: Eimantas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-11 05:46:02

Cuando se declara el array, entonces solo tenemos que agregar el valor clave en NSDictionary como

NSDictionary *normalDict = [[NSDictionary alloc]initWithObjectsAndKeys:@"Value1",@"Key1",@"Value2",@"Key2",@"Value3",@"Key3",nil];

No podemos agregar o eliminar los valores clave en este NSDictionary

Donde como en NSMutableDictionary también podemos agregar los objetos después de la inicialización del array mediante el uso de este método

NSMutableDictionary *mutableDict = [[NSMutableDictionary alloc]init];'
[mutableDict setObject:@"Value1" forKey:@"Key1"];
[mutableDict setObject:@"Value2" forKey:@"Key2"];
[mutableDict setObject:@"Value3" forKey:@"Key3"];

Para eliminar el valor de la clave tenemos que usar el siguiente código

[mutableDict removeObject:@"Value1" forKey:@"Key1"];
 12
Author: Madhu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-15 11:33:02

Actualización de la versión

Objective-C

Crear:

NSDictionary *dictionary = @{@"myKey1": @7, @"myKey2": @5}; 

Cambio:

NSMutableDictionary *mutableDictionary = [dictionary mutableCopy];     //Make the dictionary mutable to change/add
mutableDictionary[@"myKey3"] = @3;

La sintaxis abreviada se llama Objective-C Literals.

Swift

Crear:

var dictionary = ["myKey1": 7, "myKey2": 5]

Cambio:

dictionary["myKey3"] = 3
 8
Author: Warif Akhand Rishi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-07 15:37:43

Lo que desea preguntar es "cuál es la diferencia entre una matriz o diccionario mutable y una no mutable."Muchas veces se usan diferentes términos para describir cosas que ya sabes. En este caso, puede reemplazar el término "mutable" por "dinámico."Por lo tanto, un diccionario o matriz mutable es uno que es "dinámico" y puede cambiar en tiempo de ejecución, mientras que un diccionario o matriz no mutable es uno que es "estático" y definido en su código y no cambia en tiempo de ejecución (en otras palabras, no añadirá, borrará o posiblemente ordenará los elementos.)

En cuanto a cómo se hace, nos está pidiendo que repitamos la documentación aquí. Todo lo que necesita hacer es buscar en el código de muestra y la documentación de Xcode para ver exactamente cómo se hace. Pero la cosa mutable también me tiró cuando estaba aprendiendo por primera vez, así que te voy a dar que uno!

 1
Author: Mark Hernandez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-01 16:55:09