2012-08-13 54 views
1

我需要从NSMutableArray中搜索字符串的索引。我已经实现了代码&,它工作得很好,但我需要提高搜索速度。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

您是否需要找到一个索引或倍数? – rdelmar 2012-08-13 19:27:11

+0

你需要支持部分匹配吗? (到目前为止建议的答案不允许) – 2012-08-13 20:17:29

+0

为什么你需要比你所得到的更快的速度?我用包含112,000个字的数组测试了您的代码,并在0.023秒内执行。我在下面发布的方法花了0.01秒。 – rdelmar 2012-08-13 21:20:19

回答

3

有一种方法indexOfObject

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

NSInteger index=[arrayOfStrings indexOfObject:yourString]; 
if(NSNotFound == index) { 
    NSLog(@"Not Found"); 
} 
+0

这种方法的一个问题是它不允许不区分大小写。 – rdelmar 2012-08-13 19:38:37

2

如果你只想要一个指数(或只是第一个,如果有倍数),你可以使用您发布的方法的单一版本。你也不需要的if语句:

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

如果你想找到与搜索字符串开头的字符串,只需更换isEqualToString:与hasPrefix :.使用大型搜索设置时,这似乎是您发布方法的两倍。