2011-07-24 8 views
8

Según lo que he leído, las claves en los diccionarios son únicas.¿Se pueden duplicar las llaves en NSDictionary?

consideran este código:

NSMutableDictionary *mydic = [NSMutableDictionary dictionary]; 

[mydic setObject:@"value1" forKey:@"key1"]; 
[mydic setObject:@"value1" forKey:@"key1"]; 
[mydic setObject:@"value1" forKey:@"key1"]; 

qué puedo ejecutar esto sin ningún tipo de error? ¿Qué debo hacer para evitar duplicar claves?

Respuesta

23

Las teclas Sí son únicas. Llamar a -setObject:forKey: con una clave existente anula el valor anterior - establece valores, no agrega valores. Se puede comprobar que:

[mydict setObject:@"1" forKey:@"key1"]; 
[mydict setObject:@"2" forKey:@"key1"]; 
NSLog(@"%@", mydict); 

Si no desea que los elementos existentes para ser anulados, comprobar si existe con -objectForKey::

@implementation NSMutableDictionary (AddItem) 
-(void)addObjectWithoutReplacing:(id)obj forKey:(id)key { 
    if ([self objectForKey:key] == nil) 
     [self setObject:obj forKey:key]; 
} 
@end 
+0

gracias Kenny, pero yo no sé si tienes lo Quise decir exactamente o no, aquí vuelvo a decir. Imagine que tengo una lista de URLs que quiero guardar, ¡pero no quiero guardar un enlace dos veces! así que voy a usar una tabla hash que es NSDictionary en el objetivo c, en el ejemplo que mencioné anteriormente está guardando las mismas claves (duplicadas) en un diccionario, ¿por qué? –

+0

@saleh: ¿Qué quieres decir? ¿Cuáles son las claves y los valores? – kennytm

+0

no necesita valor, solo quiere llenar los campos de claves con una entrada única. –

Cuestiones relacionadas