2012-04-08 13 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'で常に知っていない限り、このアプローチは、ブロック – 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

これは、基本的にこれは辞書のインデックスを与える

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

ジョナスSchnelli答え:)と同じですが配列で。

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); 
    }  
} 
関連する問題