1

から文字列のインデックスを検索する必要がありますNSMutableArray。完璧に動作するコードを実装しましたが、これよりも検索速度を上げる必要があります。

次のコードを使用しました。

NSIndexSet *indexes = [mArrayTableData indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop){
    NSString *s = (NSString*)obj;
    NSRange range = [s rangeOfString: txtField.text options:NSCaseInsensitiveSearch];
    if(range.location == 0)//
        return range.location != NSNotFound;
    return NO;
}];

NSLog(@"indexes.firstIndex =%d",indexes.firstIndex);
4

2 に答える 2

3

方法がありますindexOfObject

NSString *yourString=@"Your string";
NSMutableArray *arrayOfStrings = [NSMutableArray arrayWithObjects: @"Another strings", @"Your string", @"My String", nil];

NSInteger index=[arrayOfStrings indexOfObject:yourString];
if(NSNotFound == index) {
    NSLog(@"Not Found");
}
于 2012-08-13T19:25:52.560 に答える
2

1 つのインデックスのみが必要な場合 (複数ある場合は最初のインデックスのみ)、投稿したメソッドの単数バージョンを使用できます。if 句も必要ありません。

NSInteger index = [mArrayTableData indexOfObjectPassingTest:^BOOL(NSString *obj, NSUInteger idx, BOOL *stop){
        return [obj.lowercaseString isEqualToString:txtField.text.lowercaseString];
    }];

検索文字列で始まる文字列を見つけたい場合は、isEqualToString: を hasPrefix: に置き換えるだけです。大規模な検索セットでは、これは投稿した方法の約 2 倍の速さのようです。

于 2012-08-13T19:40:56.873 に答える