2010-02-03 42 views
76

Tôi chỉ cần hỏi một cái gì đó như sau. Giả sử tôi đang có từ điển.NSDictionary - Cần kiểm tra xem từ điển có chứa cặp khóa-giá trị hay không

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"]; 

Bây giờ, tôi cần phải kiểm tra như sau

[xyz không chứa chìa khóa "b" giá trị ?? cặp hay không?

Câu hỏi là như thế nào?

Câu hỏi khác là làm thế nào để chỉ đếm tổng số cặp khóa-giá trị?

Nói ví dụ NSInteger mCount=[xyz keyCounts];

Trả lời

167

Chỉ cần hỏi nó cho objectForKey:@"b". Nếu nó trả về nil, không có đối tượng nào được đặt ở khóa đó.

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

Sửa: Đối với câu hỏi thứ hai thay đổi nội dung của bạn, nó chỉ đơn giản là NSUInteger mCount = [xyz count];. Cả hai câu trả lời này đều được ghi nhận rõ ràng và dễ dàng trong tài liệu tham khảo lớp học NSDictionary ([1][2]).

+0

+1 Trong thực tế, các tài liệu hướng thẳng lên nói này: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/ Foundation/Classes/NSDictionary_Class/Reference/Reference.html # // apple_ref/doc/uid/20000140-CBHCDIDJ –

+4

Điều gì xảy ra nếu khóa có trong từ điển và giá trị của nó là 0? Chúng ta sẽ không lầm tưởng rằng chìa khóa không có trong từ điển? – jbx72487

+9

@ jbx72487 Từ điển phải chứa các đối tượng; 'objectForKey:' trả về một 'id' - một con trỏ đến một đối tượng Objective-C. Nếu bạn đang lưu trữ số, chúng phải được ["đóng hộp"] (http://clang.llvm.org/docs/ObjectiveCLiterals.html) vào một [NSNumber] (https://developer.apple.com/library/ios /#documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html). Ngay cả khi NSNumber là số không hoặc sai nó sẽ vẫn là một con trỏ hợp lệ và mã trên sẽ phát hiện chính xác sự tồn tại. –

0

Với cú pháp theo nghĩa đen bạn có thể kiểm tra như sau

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); 
Các vấn đề liên quan