NSDictionary - 需要检查字典是否包含键值对

99

我只需要问以下问题。假设我有一个字典。

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

2个回答

199

只需使用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])。


1
+1 实际上,文档直接说明了这一点:http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/Reference/Reference.html#//apple_ref/doc/uid/20000140-CBHCDIDJ - Dave DeLong
6
如果字典中存在该键且其值为0,那么我们会不会错误地认为该键根本不存在于字典中? - jbx72487
14
字典必须包含对象;objectForKey:返回一个id——指向Objective-C对象的指针。如果要存储数字,它们必须被"装箱"NSNumber中。即使NSNumber为零或假,它仍将是一个有效的指针,上面的代码将准确地检测到其存在。 - mbauman
无法与我一起工作,它返回以下内容:终止应用程序,因为未捕获的异常 'NSInvalidArgumentException',原因是:'-[__NSSingleObjectArrayI objectForKey:]:向实例0x60000133a1c0发送了无法识别的选择器' - Amr Angry

4
使用文字语法,您可以按以下方式进行检查
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); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接