NSDictionary-사전에 키-값 쌍이 포함되어 있는지 확인해야합니다.


96

다음과 같이 물어볼 필요가 있습니다. 사전이 있다고 가정 해 봅시다.

NSMutableDictionary *xyz=[[NSMutableDictionary alloc] init];
[xyz setValue:@"sagar" forKey:@"s"];
[xyz setValue:@"amit" forKey:@"a"];
[xyz setValue:@"nirav" forKey:@"n"];
[xyz setValue:@"abhishek" forKey:@"a"];
[xyz setValue:@"xrox" forKey:@"x"];

이제 다음과 같이 확인해야합니다

[xyz에 키 "b"값이 포함되어 있습니까? ?? 쌍인가?

질문은 어떻게?

다른 질문은 총 키-값 쌍을 계산하는 방법입니다.

예를 들어 말해 NSInteger mCount=[xyz keyCounts];

답변:


193

그냥 objectForKey:@"b". 를 반환하면 nil해당 키에 개체가 설정되지 않은 것입니다.

if ([xyz objectForKey:@"b"]) {
    NSLog(@"There's an object set for key @\"b\"!");
} else {
    NSLog(@"No object set for key @\"b\"");
}

편집 : 편집 한 두 번째 질문은 간단 NSUInteger mCount = [xyz count];합니다. 이 두 답변은 모두 잘 문서화되어 있으며 NSDictionary 클래스 참조 ( [1] [2] ) 에서 쉽게 찾을 수 있습니다 .


+1 사실, 문서는 다음과 같이 말합니다. developer.apple.com/mac/library/documentation/Cocoa/Reference/…
Dave DeLong

6
키가 사전에 있고 값이 0이면 어떻게됩니까? 키가 사전에 전혀 존재하지 않는다고 잘못 생각하지 않습니까?
jbx72487 2013

13
@ jbx72487 사전은 객체를 포함해야합니다. objectForKey:반환 id-Objective-C 객체에 대한 포인터. 당신이 번호를 저장하는 경우, 그들은해야한다 "박스"의 NSNumber . NSNumber가 0이거나 거짓 인 경우에도 여전히 유효한 포인터이며 위의 코드는 존재를 정확하게 감지합니다.
Matt B.

나와 함께 작동하지 않는 경우 다음을 반환합니다. 잡히지 않은 예외 'NSInvalidArgumentException'으로 인해 앱 종료, 이유 : '-[__ NSSingleObjectArrayI objectForKey :] : 인스턴스 0x60000133a1c0으로 전송 된 인식 할 수없는 선택기'
Amr Angry

2

리터럴 구문으로 다음과 같이 확인할 수 있습니다.

static const NSString* kKeyToCheck = @"yourKey"
if (xyz[kKeyToCheck])
  NSLog(@"Key: %@, has Value: %@", kKeyToCheck, xyz[kKeyToCheck]);
else
 NSLog(@"Key pair do not exits for key: %@", kKeyToCheck); 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.