问题
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?
回答1:
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
来源:https://stackoverflow.com/questions/6807953/keys-in-nsdictionary-can-be-duplicated