2010-02-03 10 views
76

Po prostu muszę o coś zapytać. Załóżmy, że mam słownik.NSDictionary - Należy sprawdzić, czy słownik zawiera parę klucz-wartość, czy też nie.

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

Teraz muszę sprawdzić w następujący sposób

[xyz nie zawiera klawisz "b" wartość ?? sparować, czy nie?

Pytanie brzmi Jak?

Drugie pytanie to Jak liczyć całkowitą parę klucz-wartość?

Powiedz na przykład NSInteger mCount=[xyz keyCounts];

Odpowiedz

167

Wystarczy poprosić go o objectForKey:@"b". Jeśli zwróci ona nil, żaden obiekt nie zostanie ustawiony na tym klawiszu.

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

Edit: Jak do edytowanej drugie pytanie, to po prostu NSUInteger mCount = [xyz count];. Obie te odpowiedzi są dobrze udokumentowane i łatwe do znalezienia w klasie odniesienia NSDictionary ([1][2]).

+0

+1 w rzeczywistości, dokumentacja prosto mówi tak: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/ Podstawy/Klasy/NSDictionary_Class/Reference/Reference.html # // apple_ref/doc/uid/20000140-CBHCDIDJ –

+4

Co się stanie, jeśli klucz jest w słowniku, a jego wartość wynosi 0? Czy nie pomylimy się błędnie, że klucz w ogóle nie występuje w słowniku? – jbx72487

+9

@ jbx72487 Słowniki muszą zawierać obiekty; 'objectForKey:' zwraca "id" - wskaźnik do obiektu Objective-C. Jeśli przechowujesz liczby, muszą one być ["boxed"] (http://clang.llvm.org/docs/ObjectiveCLiterals.html) w [numer NSN] (https://developer.apple.com/library/ios /#documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html). Nawet jeśli NSNumber ma wartość zero lub false, nadal będzie prawidłowym wskaźnikiem, a powyższy kod dokładnie wykryje istnienie. –

0

Z literalnego składni można sprawdzić w następujący sposób

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); 
Powiązane problemy