NSDictionary - Perlu memeriksa apakah kamus berisi pasangan nilai kunci atau tidak


96

Saya hanya perlu menanyakan sesuatu sebagai berikut. Misalkan saya memiliki kamus.

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

Sekarang, saya perlu memeriksa sebagai berikut

[xyz tidak berisi nilai kunci "b" ?? berpasangan atau tidak?

Pertanyaannya adalah Bagaimana?

Pertanyaan lainnya adalah Bagaimana cara menghitung total pasangan nilai kunci?

Katakanlah misalnya NSInteger mCount=[xyz keyCounts];

Jawaban:


193

Tanyakan saja untuk objectForKey:@"b". Jika kembali nil, tidak ada objek yang disetel pada kunci itu.

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

Edit : Untuk pertanyaan kedua yang Anda edit, itu sederhana NSUInteger mCount = [xyz count];. Kedua jawaban ini didokumentasikan dengan baik dan mudah ditemukan di referensi kelas NSDictionary ( [1] [2] ).


+1 Faktanya, dokumentasi langsung mengatakan ini: developer.apple.com/mac/library/documentation/Cocoa/Reference/…
— Dave DeLong

6
Bagaimana jika kuncinya ada dalam kamus dan nilainya 0? Bukankah kita secara keliru mengira bahwa kuncinya sama sekali tidak ada dalam kamus?
— jbx72487

13
@ jbx72487 Kamus harus berisi objek; objectForKey:mengembalikan sebuah id- pointer ke objek Objective-C. Jika Anda menyimpan nomor, nomor tersebut harus "dikotakkan" menjadi NSNumber . Bahkan jika NSNumber adalah nol atau salah itu akan tetap menjadi penunjuk yang valid dan kode di atas akan mendeteksi keberadaan secara akurat.
— Matt B.

tidak bekerja dengan saya itu mengembalikan yang berikut: Menghentikan aplikasi karena pengecualian yang tidak tertangkap 'NSInvalidArgumentException', reason: '- [__ NSSingleObjectArrayI objectForKey:]: pemilih tidak dikenal dikirim ke instance 0x60000133a1c0'
— Amr Marah

2

Dengan sintaks literal Anda dapat memeriksa sebagai berikut

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); 
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.