NSDictionary - Es muss überprüft werden, ob das Wörterbuch ein Schlüssel-Wert-Paar enthält oder nicht


96

Ich muss nur Folgendes fragen. Angenommen, ich habe ein Wörterbuch.

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

Jetzt muss ich Folgendes überprüfen

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

Frage ist wie?

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

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

Antworten:


193

Fragen Sie einfach nach dem objectForKey:@"b". Wenn es zurückkehrt nil, wird an diesem Schlüssel kein Objekt festgelegt.

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

Bearbeiten : Die bearbeitete zweite Frage ist einfach NSUInteger mCount = [xyz count];. Beide Antworten sind gut dokumentiert und leicht in der NSDictionary- Klassenreferenz ( [1] [2] ) zu finden.



6
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

13
@ jbx72487 Wörterbücher müssen Objekte enthalten; objectForKey:Gibt ideinen Zeiger auf ein Objective-C-Objekt zurück. Wenn Sie Nummern speichern, müssen diese in eine NS-Nummer "eingepackt" werden . Selbst wenn die NSNumber Null oder falsch ist, ist sie immer noch ein gültiger Zeiger und der obige Code erkennt die Existenz genau.
— Matt B.

Wenn ich nicht mit mir zusammenarbeite, wird Folgendes zurückgegeben: Beenden der App aufgrund einer nicht erfassten Ausnahme 'NSInvalidArgumentException', Grund: '- [__ NSSingleObjectArrayI objectForKey:]: Nicht erkannter Selektor an Instanz 0x60000133a1c0 gesendet'
— Amr Angry

2

Mit der Literal-Syntax können Sie Folgendes überprüfen

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); 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.