NSDictionary中的键可以复制吗?

sal*_*hni 8 cocoa objective-c nsdictionary

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

考虑以下代码:

NSMutableDictionary *mydic = [NSMutableDictionary dictionary];

[mydic setObject:@"value1" forKey:@"key1"]; 
[mydic setObject:@"value1" forKey:@"key1"];
[mydic setObject:@"value1" forKey:@"key1"];
Run Code Online (Sandbox Code Playgroud)

为什么我可以毫无错误地运行它?我该怎么做才能避免重复密钥?

ken*_*ytm 23

是键是独一无二的.-setObject:forKey:使用现有密钥调用将覆盖旧值 - 它设置值,而不是添加值.你可以检查:

[mydict setObject:@"1" forKey:@"key1"];
[mydict setObject:@"2" forKey:@"key1"];
NSLog(@"%@", mydict);
Run Code Online (Sandbox Code Playgroud)

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

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

  • @saleh:如果不使用值,请不要使用NSMutableDictionary.改为创建一个NSMutableSet. (2认同)