2010-02-03 7 views
76

Ich muss nur etwas wie folgt fragen. Angenommen, ich habe ein Wörterbuch.NSDictionary - Muss überprüft werden, ob Wörterbuch enthält Schlüssel-Wert-Paar oder nicht

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

Nun, ich brauche zu überprüfen,

folgt

[xyz Schlüssel "b" Wert nicht enthält ?? Paar oder nicht?

Frage ist wie?

Die andere Frage ist, wie man das gesamte Schlüssel-Wert-Paar nur zählt?

Sagen Sie zum Beispiel NSInteger mCount=[xyz keyCounts];

Antwort

167

Fragen Sie einfach es für die objectForKey:@"b". Wenn es nil zurückgibt, wird kein Objekt für diesen Schlüssel festgelegt.

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

bearbeiten: Was Ihre zweite Frage bearbeitet, dann ist es einfach NSUInteger mCount = [xyz count];. Beide Antworten sind gut dokumentiert und leicht in der Klassenreferenz ([1][2]) zu finden.

+0

+1 In der Tat folgt, sagt die Dokumentation gerade nach oben folgt aus: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/ Foundation/Classes/NSDictionary_Class/Referenz/Reference.html # // apple_ref/doc/uid/20000140-CBHCDIDJ –

+4

Was ist, wenn der Schlüssel im Wörterbuch vorhanden ist und sein Wert 0 ist? Würden wir nicht fälschlicherweise denken, dass der Schlüssel überhaupt nicht im Wörterbuch vorhanden ist? – jbx72487

+9

@ jbx72487 Wörterbücher müssen Objekte enthalten; 'objectForKey:' gibt eine 'id' zurück - einen Zeiger auf ein Objective-C-Objekt. Wenn Sie Nummern speichern, müssen sie ["boxed"] (http://clang.llvm.org/docs/ObjectiveCLiterals.html) in [NSNumber] (https://developer.apple.com/library/ios /#documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html). Selbst wenn NSNumber gleich Null oder falsch ist, wird es immer noch ein gültiger Zeiger sein und der obige Code wird das Vorhandensein genau erkennen. –

0

Mit Literalsyntax können Sie prüfen, wie

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); 
Verwandte Themen