NSDictionary - Cần kiểm tra xem từ điển có chứa cặp khóa-giá trị hay không


96

Tôi chỉ cần hỏi một vài điều như sau. Giả sử tôi đang có một cuốn từ điển.

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 kiểm tra như sau

[xyz có chứa khóa "b" giá trị ?? ghép đôi hay không?

Câu hỏi là Làm thế nào?

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

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

Câu trả lời:


193

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

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

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


+1 Trên thực tế, tài liệu hướng dẫn thẳng lên cho biết điều này: developer.apple.com/mac/library/documentation/Cocoa/Reference/…
Dave DeLong

6
Điều gì sẽ 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 hoàn toàn không có trong từ điển chứ?
jbx72487

13
@ 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ữ các số, chúng phải được "đóng hộp" thành Số NSN . Ngay cả khi Số NSN là 0 hoặc sai thì nó vẫn là một con trỏ hợp lệ và đoạn mã trên sẽ phát hiện chính xác sự tồn tại.
Matt B.

không làm việc với tôi nó trở lại như sau: Ứng dụng Chấm dứt do ngoại lệ còn tự do 'NSInvalidArgumentException', lý do: '- [__ NSSingleObjectArrayI objectForKey:]: chọn không được công nhận gửi đến dụ 0x60000133a1c0'
Amr Angry

2

Với cú pháp chữ 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); 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.