NSDictionary - Sözlüğün anahtar / değer çifti içerip içermediğini kontrol etmeniz gerekir


97

Sadece aşağıdaki gibi bir şey sormam gerekiyor. Bir sözlüğüm olduğunu varsayalım.

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

Şimdi aşağıdaki gibi kontrol etmem gerekiyor

[xyz anahtar "b" değerini içeriyor mu? çift ​​mi değil mi?

Soru Nasıl?

Diğer soru, toplam anahtar / değer çifti nasıl sayılır?

Örneğin söyle NSInteger mCount=[xyz keyCounts];

Yanıtlar:


194

Sadece isteyin objectForKey:@"b". Dönerse nil, o anahtarda hiçbir nesne ayarlanmamıştır.

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

Düzenleme : Düzenlediğiniz ikinci sorunuza gelince, basitçe NSUInteger mCount = [xyz count];. Bu yanıtların her ikisi de iyi belgelenmiştir ve NSDictionary sınıf referansında ( [1] [2] ) kolayca bulunur .


+1 Aslında, dokümantasyon açıkça şunu söylüyor: developer.apple.com/mac/library/documentation/Cocoa/Reference/…
Dave DeLong

6
Anahtar sözlükte varsa ve değeri 0 ise ne olur? Yanlışlıkla anahtarın sözlükte hiç bulunmadığını düşünmez miydik?
jbx72487

13
@ jbx72487 Sözlükler nesneler içermelidir; objectForKey:bir id- Objective-C nesnesine bir işaretçi döndürür . Numaraları depoluyorsanız, bir NSNumarası içinde "kutulanmalıdır" . NSNumber sıfır veya yanlış olsa bile, yine de geçerli bir işaretçi olacak ve yukarıdaki kod, varlığı doğru bir şekilde algılayacaktır.
Matt B.

benimle çalışmıyor, aşağıdakileri döndürür: Yakalanmamış istisna 'NSInvalidArgumentException' nedeniyle uygulama sonlandırılıyor, neden: '- [__ NSSingleObjectArrayI objectForKey:]: 0x60000133a1c0 örneğine gönderilen tanınmayan seçici
Amr Angry

2

Değişmez sözdizimi ile aşağıdaki gibi kontrol edebilirsiniz

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); 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.