検索バーでテーブルビューコントローラーを使用しています。テーブルから任意の文字列の検索結果に関連する配列要素のすべてのインデックス位置を取得したいと考えています。
例: @"sau",@"jain",@"abc",@"sau",@"zyx" を含む配列があり、'sau' を検索すると、index を出力したい0 と 3。
どうすればこれを達成できますか?
検索バーでテーブルビューコントローラーを使用しています。テーブルから任意の文字列の検索結果に関連する配列要素のすべてのインデックス位置を取得したいと考えています。
例: @"sau",@"jain",@"abc",@"sau",@"zyx" を含む配列があり、'sau' を検索すると、index を出力したい0 と 3。
どうすればこれを達成できますか?
次のコードを試してください:
NSArray *array = @[ @"sau", @"jain", @"abc", @"sau", @"zyx" ];
NSString *searchString = @"sau";
NSIndexSet *result = [array indexesOfObjectsPassingTest:^BOOL(NSString *string, NSUInteger idx, BOOL *stop) {
NSRange searchStringRange = [string rangeOfString:searchString options:NSCaseInsensitiveSearch];
return searchStringRange.length > 0;
}];
NSLog(@"Result indexes: %@", result);
コンソール出力はResult indexes: <NSIndexSet: 0x8a80c50>[number of indexes: 2 (in 2 ranges), indexes: (0 3)]
検索ロジックに合わせてブロック内のコードを調整する
編集
または、オブジェクトを 1 つずつ処理する
NSArray *array = @[ @"sau", @"jain", @"abc", @"sau", @"zyx" ];
NSString *searchString = @"sau";
[array enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL *stop) {
BOOL searchCondition = [obj isEqualToString:searchString];
if (!searchCondition) return;
// You logic to process objects passing the search condition
}];