Доступ к NSDictionary внутри NSArray - PullRequest
7 голосов
/ 27 февраля 2011

У меня есть NSArray из NSDictionary.Каждый словарь в массиве имеет три ключа: «Имя», «Пол» и «Возраст»

Как найти индекс в NSArray из NSDictionary, где, например, Name = 'Roger'?

Ответы [ 4 ]

15 голосов
/ 27 февраля 2011

На iOS 4.0 и выше вы можете сделать следующее:

- (NSUInteger) indexOfObjectWithName: (NSString*) name inArray: (NSArray*) array
{
    return [array indexOfObjectPassingTest:
        ^BOOL(id dictionary, NSUInteger idx, BOOL *stop) {
            return [[dictionary objectForKey: @"Name"] isEqualToString: name];
    }];
}

Элегантно, нет?

6 голосов
/ 27 февраля 2011
    NSUInteger count = [array count];
    for (NSUInteger index = 0; index < count; index++)
    {  
        if ([[[array objectAtIndex: index] objectForKey: @"Name"] isEqualToString: @"Roger"])
        {  
            return index;
        }   
    }
    return NSNotFound;
0 голосов
/ 27 февраля 2011

Если вы используете iOS> 3.0, вы сможете использовать конструкцию for in.

for(NSDictionary *dict in myArray) {
  if([[dict objectForKey:@"Name"] isEqualToString:@"Roger"]) {
    return [myArray indexForObject:dict];
  }
}
0 голосов
/ 27 февраля 2011

Есть метод [NSArray indexOfObjectPassingTest].Но он использует блоки, расширение Apple для C, и, следовательно, является злом.Вместо этого сделайте это:

NSArray *a; //Comes from somewhere...
int i;
for(i=0;i<a.count;i++)
    if([[[a objectAtIndex:i] objectForKey: @"Name"] compare: @"Roger"] == 0)
        return i; //That's the index you're looking for
return -1; //Not found
...