Ключи в NSDictionary могут дублироваться? - PullRequest
8 голосов
/ 24 июля 2011

Из того, что я прочитал, ключи в словарях уникальны.

Рассмотрим этот код:

NSMutableDictionary *mydic = [NSMutableDictionary dictionary];

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

Почему я могу запустить это без каких-либо ошибок?Что я должен сделать, чтобы избежать дублирования ключей?

1 Ответ

23 голосов
/ 24 июля 2011

Да ключи уникальны.Вызов -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
...