Цель C: Лучший способ определить, существует ли ключ словаря внутри массива? - PullRequest
0 голосов
/ 06 января 2019

В этом примере я пытаюсь получить все значения имени в 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. Код ниже показывает, как я это делаю.

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

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

1 Ответ

0 голосов
/ 06 января 2019

Не используйте 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];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...