Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Keys in NSDictionary can be duplicated?

From what I have read, keys in dictionaries are unique.

Consider this code:

NSMutableDictionary *mydic = [NSMutableDictionary dictionary];

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

Why can I run this without any error? What should I do to avoid duplicate keys?

like image 305
saleh Hosseinkahni Avatar asked Jul 24 '11 16:07

saleh Hosseinkahni


1 Answers

Yes keys are unique. Calling -setObject:forKey: with an existing key overrides the old value — it sets values, not adds values. You can check that:

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

If you don't want existing items to be overridden, check if it exists with -objectForKey::

@implementation NSMutableDictionary (AddItem)
-(void)addObjectWithoutReplacing:(id)obj forKey:(id)key {
   if ([self objectForKey:key] == nil)
      [self setObject:obj forKey:key];
}
@end
like image 176
kennytm Avatar answered Sep 23 '22 00:09

kennytm