NSDictionary: è necessario verificare se il dizionario contiene o meno una coppia chiave-valore


96

Devo solo chiedere una cosa come segue. Supponiamo che io abbia un dizionario.

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

Ora devo controllare come segue

[xyz contiene il valore della chiave "b" ?? coppia o no?

La domanda è come?

L'altra domanda è: come contare semplicemente la coppia chiave-valore totale?

Dì per esempio NSInteger mCount=[xyz keyCounts];

Risposte:


193

Chiedilo solo per il file objectForKey:@"b". Se ritorna nil, nessun oggetto è impostato su quella chiave.

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

Modifica : per quanto riguarda la seconda domanda modificata, è semplicemente NSUInteger mCount = [xyz count];. Entrambe queste risposte sono ben documentate e facilmente reperibili nel riferimento alla classe NSDictionary ( [1] [2] ).



6
Cosa succede se la chiave è presente nel dizionario e il suo valore è 0? Non penseremmo erroneamente che la chiave non sia affatto presente nel dizionario?
jbx72487

13
@ jbx72487 I dizionari devono contenere oggetti; objectForKey:restituisce un idpuntatore a un oggetto Objective-C. Se stai memorizzando i numeri, devono essere "inscatolati" in un NSNumber . Anche se NSNumber è zero o falso, sarà comunque un puntatore valido e il codice precedente rileverà accuratamente l'esistenza.
Matt B.

non funziona con me restituisce quanto segue: Chiusura dell'app a causa di un'eccezione non rilevata "NSInvalidArgumentException", motivo: "- [__ NSSingleObjectArrayI objectForKey:]: selettore non riconosciuto inviato all'istanza 0x60000133a1c0"
Amr Angry

2

Con la sintassi letterale puoi controllare come segue

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); 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.