代码之家  ›  专栏  ›  技术社区  ›  Curt Rand

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

  •  0
  • Curt Rand  · 技术社区  · 6 年前

    在这个例子中,我尝试获取 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"}];
    

    我将得到一个空值数组。有没有办法检查 name 钥匙先存在?我提出的唯一解决方案是创建一个 NSMutableArray 循环遍历所有键并确保值不为空并将其添加到 非晶射线 . 下面的代码显示了我是如何做到这一点的。

    NSMutableArray *mutableArray = [[NSMutableArray alloc]init];
    
    for (id string in nameArray) {
         if ([string isKindOfClass:[NSString class]]) {
              [mutableArray addObject:string];
              }
          }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   rmaddy    6 年前

    不要使用 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];
        }
    }