Разница между оператором доступа NSMutableDictionary и std :: map

Создает ли target-c новую запись, когда ключ отсутствует в словаре, но доступен? Как в операторе std :: map [].

int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableDictionary<NSNumber *, NSString *> *D = [NSMutableDictionary new];
D[@10] = @"ten";
if (D[@1] == nil) // will it create an entry for D[@1]?
NSLog(@"Found with nil");
}
return 0;
}

0

Решение

Я думаю, что ответ НЕТ. Вы можете проверить это по приведенному ниже коду.

int main(int argc, char * argv[]) {
@autoreleasepool {
NSMutableDictionary<NSNumber *, NSString *> *D = [NSMutableDictionary new];
D[@10] = @"ten";
NSLog(@"%@", D); // { 10 = ten; } logged
if (D[@1] == nil) // will it create an entry for D[@1]?
NSLog(@"%@", D); // { 10 = ten; } logged. @1 key doesn't exist
}
}

Кроме того, вы должны взглянуть на документ Apple для objectForKey: метод.

Значение, связанное с aKey, или nil, если никакое значение не связано с aKey.

D[@1] это синтаксис сахара [D objectForKey:@1], Таким образом, согласно документу, он вернет ноль, если никакое значение не связано с ключом 1, Вот почему D[@1] == nil

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]