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


96

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

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

Answers:


193

只是要求它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])中都有很好的文档记录,很容易找到。



6
如果密钥存在于字典中并且其值为0,该怎么办?我们难道不会误以为该键根本不在字典中吗?
jbx72487 2013年

13
@ jbx72487字典必须包含对象;objectForKey:返回id一个指向Objective-C对象的指针。如果要存储数字,则必须将它们“装箱”NSNumber中。即使NSNumber为零或false,它仍然是有效的指针,并且上面的代码将准确地检测到存在。
Matt B.

不和我一起工作有下列返回:终止应用程序由于未捕获的异常“NSInvalidArgumentException”,原因是:“ - [__ NSSingleObjectArrayI objectForKey:]:无法识别的选择发送到实例0x60000133a1c0”
阿姆鲁愤怒的

2

使用文字语法,您可以检查以下内容

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); 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.