搜索NSMutableArray的索引

时间:2012-08-13 19:19:55

标签: iphone objective-c ios nsindexset

我需要从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);

2 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分:2)

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

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

如果要查找以搜索字符串开头的字符串,只需将isEqualToString:替换为hasPrefix:。使用大型搜索集时,它的速度大约是您发布的方法的两倍。