2012-04-08 73 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'這種做法將需要一個額外的for循環塊 – nacho4d 2012-04-08 17:52:31

+0

很好的解決方案內。但需要通知:可在iOS 4.0,Mac OS X v10.6及更高版本中使用。 – 2012-04-08 17:55:11

+3

@ nacho4d,如果目標不一定在索引0,只需使用'[obj containsObject:@「3」]'。 – 2012-04-08 18:01:06

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

這是基本相同喬納斯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); 
    }  
}