2010-02-03 8 views
76

Solo necesito preguntar algo de la siguiente manera. Supongamos que tengo un diccionario.NSDictionary - Necesito comprobar si el diccionario contiene pares clave-valor o no

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

Ahora, tengo que comprobar de la siguiente manera

[xyz no contiene la clave de valor "b" ?? par o no?

Pregunta es ¿Cómo?

La otra pregunta es ¿Cómo contar el par clave-valor total?

decir, por ejemplo NSInteger mCount=[xyz keyCounts];

Respuesta

167

sólo pregunte por el objectForKey:@"b". Si devuelve nil, no se establece ningún objeto en esa clave.

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

Editar: En cuanto a su segunda pregunta editado, es simplemente NSUInteger mCount = [xyz count];. Ambas respuestas se documentan bien y se encuentran fácilmente en la referencia de clase NSDictionary ([1][2]).

+0

+1 De hecho, la documentación directamente hacia arriba dice esto: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/ Foundation/Classes/NSDictionary_Class/Reference/Reference.html # // apple_ref/doc/uid/20000140-CBHCDIDJ –

+4

¿Qué sucede si la clave está presente en el diccionario y su valor es 0? ¿No pensaríamos erróneamente que la clave no está presente en el diccionario? – jbx72487

+9

@ jbx72487 Los diccionarios deben contener objetos; 'objectForKey:' devuelve un 'id' - un puntero a un objeto Objective-C. Si está almacenando números, deben estar ["en recuadro"] (http://clang.llvm.org/docs/ObjectiveCLiterals.html) en un [NSNumber] (https://developer.apple.com/library/ios /#documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html). Incluso si NSNumber es cero o falso, seguirá siendo un puntero válido y el código anterior detectará con precisión la existencia. –

0

Con la sintaxis literal se puede comprobar de la siguiente manera

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); 
Cuestiones relacionadas