在此示例中,我试图在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];
}
}
答案 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];
}
}