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

如果您只想要一个索引(或者如果有多个索引,则只需要第一个),您可以使用您发布的方法的单数版本。您也不需要 if 子句:

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

如果要查找以搜索字符串开头的字符串,只需将 isEqualToString: 替换为 hasPrefix:。对于大型搜索集,这似乎比您发布的方法快两倍。

于 2012-08-13T19:40:56.873 回答