NSMutableDictionary 和 std::map 的访问运算符之间的区别
Difference between access operator of NSMutableDictionary and std::map
当关键字不在字典中但被访问时,objective-c是否创建一个新条目?就像 std::map operator[].
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;
}
我认为答案是否。您可以通过以下代码查看。
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
}
}
除此之外,您应该查看有关 objectForKey: 方法的 Apple 文档。
The value associated with aKey, or nil if no value is associated with aKey.
D[@1]
是 [D objectForKey:@1]
的语法糖。因此根据文档,如果没有值与键 1
相关联,它将 return nil。这就是为什么 D[@1] == nil
当关键字不在字典中但被访问时,objective-c是否创建一个新条目?就像 std::map operator[].
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;
}
我认为答案是否。您可以通过以下代码查看。
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
}
}
除此之外,您应该查看有关 objectForKey: 方法的 Apple 文档。
The value associated with aKey, or nil if no value is associated with aKey.
D[@1]
是 [D objectForKey:@1]
的语法糖。因此根据文档,如果没有值与键 1
相关联,它将 return nil。这就是为什么 D[@1] == nil