目标C:确定数组中是否存在字典键的最佳方法?

时间:2019-01-05 22:10:02

标签: objective-c arrays dictionary

在此示例中,我试图在dictionaries中抓取Array中的所有名称值。以下代码效果很好。

NSArray *array = @[@{@"name" : @"joe"},
                   @{@"name" : @"john"},
                   @{@"name" : @"jack"}];

NSArray *nameArray = [array valueForKey:@"name"];                                                   
NSLog(@"name array is %@",nameArray);

但是,如果数组在后面

NSArray *array = @[@{@"foo" : @"joe"},
                       @{@"foo" : @"john"},
                       @{@"foo" : @"jack"}];

我将得到一个null数组。有没有一种方法可以检查name键是否首先存在?我想到的唯一解决方案是创建一个NSMutableArray并遍历所有键,并确保该值不为null并将其添加到NSMutableArray中。下面的代码显示了我的操作方法。

NSMutableArray *mutableArray = [[NSMutableArray alloc]init];

for (id string in nameArray) {
     if ([string isKindOfClass:[NSString class]]) {
          [mutableArray addObject:string];
          }
      }

1 个答案:

答案 0 :(得分:0)

如果键可能不存在,并且您不希望结果数组中为null,请不要使用valueForKey:。只需自己迭代数组即可。

NSArray *array = @[@{@"name" : @"joe"},
                   @{@"name" : @"john"},
                   @{@"name" : @"jack"}];

NSMutableArray *nameArray = [[NSMutableArray alloc] init];
for (NSDictionary *dict in array) {
    NSString *name = dict[@"name"];
    if (name) {
        [nameArray addObject:name];
    }
}