NSDictionary中的键可以复制吗?

时间:2011-07-24 16:08:30

标签: objective-c cocoa nsdictionary

根据我的阅读,词典中的键是唯一的。

考虑以下代码:

NSMutableDictionary *mydic = [NSMutableDictionary dictionary];

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

为什么我可以在没有任何错误的情况下运行它?我该怎么做才能避免重复密钥?

1 个答案:

答案 0 :(得分:23)

是键是唯一的。使用现有密钥调用-setObject:forKey:会覆盖旧值 - 它设置值,而不是添加值。你可以查看:

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

如果您不希望覆盖现有项目,请检查-objectForKey:是否存在:

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