2017-11-29 5 views
0

objective-cは、キーが辞書にないのにアクセスされたときに新しいエントリを作成しますか? std :: map演算子[]と同様です。NSMutableDictionaryと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; 
} 

答えて

1

私は答えがNOだと思います。以下のコードで確認できます。

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:の方法を見てください。

aKeyに関連付けられた値。aKeyに値が関連付けられていない場合はnil。

D[@1]は、[D objectForKey:@1]です。したがって、文書によれば、値がキー1に関連付けられていない場合、nilを返します。だからこそD[@1] == nil

関連する問題