2012-04-08 3 views
0

В качестве примера, если у меня есть этот массив:Найти индекс объекта массива в объекте массива

_mode = [NSArray arrayWithObjects: 
         [NSArray arrayWithObjects:@"1", @"One", nil], 
         [NSArray arrayWithObjects:@"2", @"Two", nil], 
         [NSArray arrayWithObjects:@"3", @"Three", nil], 
         [NSArray arrayWithObjects:@"4", @"Four", nil], 
         [NSArray arrayWithObjects:@"5", @"Five", nil], 
         nil]; 

и мне нужно найти какой объект массива _mode содержит @"3" как бы я это сделать? Я пробовал selectedIndex = [_mode indexOfObject:@"3"]; и selectedIndex = [[_mode objectAtIndex:0] indexOfObject:@"sta"];, но ни одна работа.

ответ

9
[_mode indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop){ 
    return [[obj objectAtIndex:0] isEqualToString:@"3"]; 
}]; 
+0

Если вы не знаете предмет, который вы ищете всегда с индексом '0 'такой подход нужен дополнительный цикл внутри Nice решения блока – nacho4d

+0

. Но имейте в виду: Доступно в iOS 4.0, Mac OS X v10.6 и более поздних версиях. –

+3

@ nacho4d, если цель не обязательно указана в индексе 0, просто используйте '[obj containsObject: @" 3 "]'. –

2

нравится это?

for(NSArray *subarray in _mode) { 
    for(NSString *str in subarray) { 
    if([str isEqualToString:@"3"]) { 
    return subarray; // returns the array within _mode that contains "3" 
    } 
    } 
} 

если вам нужен индекс:

for(NSArray *subarray in _mode) { 
    for(NSString *str in subarray) { 
    if([str isEqualToString:@"3"]) { 
    return [mode indexOfObject:subarray]; 
    } 
    } 
} 
2

Это в основном так же, как Jonas Schnelli ответ :)

for (NSArray *subarray in _mode){ 
    NSInteger index = [subarray indexOfObject:@"3"]; 
    if (index != NSNotFound) return subarray; 
} 
2

Это дает индекс словаря, который в массиве.

for (NSDictionary *dict in self.yourArray) { 
    if ([anotherArray containsObject:[dict valueForKey:@"Key"]]) { 
     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[self.yourArray indexOfObject:dict] inSection:section]; 
     NSLog(@"IndexPath is %@",indexPath); 
    }  
} 
Смежные вопросы