【问题标题】:NSDictionary - Need to check whether dictionary contains key-value pair or notNSDictionary - 需要检查字典是否包含键值对
【发布时间】:2011-01-12 12:01:33
【问题描述】:

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

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

【问题讨论】:

    标签: ios objective-c nsdictionary


    【解决方案1】:

    只需询问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怎么办?难道我们不会错误地认为字典中根本不存在密钥吗?
    • @jbx72487 字典必须包含对象; objectForKey: 返回一个 id——一个指向 Objective-C 对象的指针。如果要存储数字,它们必须是 "boxed"NSNumber。即使 NSNumber 为零或假,它仍然是一个有效的指针,上面的代码将准确地检测到存在。
    • 不与我一起工作它返回以下内容:由于未捕获的异常'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); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-12
      • 2018-07-24
      • 2017-09-12
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多