2010-02-03 124 views
76

我只需要问一下如下。 假设我有一本字典。现在NSDictionary - 需要检查字典是否包含键值对

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

,我需要检查如下

[XYZ不包含密钥 “b” 值?对还是不?

问题是如何?

另一个问题是如何计算总键值对?

比方说NSInteger mCount=[xyz keyCounts];

回答

167

只是要求它为objectForKey:@"b"。如果它返回nil,则该对象不设置任何对象。

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

编辑:关于你提到的第二个编辑的问题,它只是NSUInteger mCount = [xyz count];。这两个答案在NSDictionary类参考文献([1][2])中记录良好且很容易找到。

+0

+1事实上,文档直上这样说:http://developer.apple.com/mac/library/documentation/Cocoa/Reference/基金会/类/ NSDictionary_Class/Reference/Reference.html#// apple_ref/doc/uid/20000140-CBHCDIDJ – 2010-02-03 17:21:57

+4

如果密钥存在于字典中并且其值为0会怎么样?我们是不是会误认为字典中根本没有关键字? – jbx72487 2013-02-01 18:51:59

+9

@ jbx72487字典必须包含对象; 'objectForKey:'返回一个'id' - 一个指向Objective-C对象的指针。如果你正在存储数字,他们必须[[盒装]](http://clang.llvm.org/docs/ObjectiveCLiterals.html)到[NSNumber](https://developer.apple.com/library/ios /#documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html)。即使NSNumber为零或错误,它仍然是一个有效的指针,上面的代码将准确地检测到存在。 – 2013-02-01 19:45:14

0

用文字语法,您可以检查如下

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); 
相关问题