NSDictionary - ต้องตรวจสอบว่าพจนานุกรมมีคู่คีย์ - ค่าหรือไม่


97

ฉันต้องการถามบางสิ่งดังต่อไปนี้ สมมติว่าฉันมีพจนานุกรม

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

คำตอบ:


194

เพียงแค่ขอไฟล์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

13
@ jbx72487 พจนานุกรมต้องมีวัตถุ objectForKey:ส่งกลับid- ตัวชี้ไปยังวัตถุ Objective-C หากคุณกำลังจัดเก็บตัวเลขที่พวกเขาจะต้อง"ชนิดบรรจุกล่อง"เป็นNSNumber แม้ว่า NSNumber จะเป็นศูนย์หรือเป็นเท็จ แต่ก็ยังคงเป็นตัวชี้ที่ถูกต้องและรหัสด้านบนจะตรวจจับการมีอยู่ได้อย่างแม่นยำ
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.