Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSMutableArray的搜索索引_Iphone_Objective C_Ios_Nsindexset - Fatal编程技术网

Iphone NSMutableArray的搜索索引

Iphone NSMutableArray的搜索索引,iphone,objective-c,ios,nsindexset,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: t

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

有一个方法
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");
}

有一个方法
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");
}

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

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

如果要查找以搜索字符串开头的字符串,只需将isEqualToString:替换为hasPrefix:。对于大型搜索集,这似乎是您发布的方法的两倍。如果您只需要一个索引(或者如果有多个索引,则只需要第一个索引),则可以使用您发布的方法的单一版本。您也不需要if子句:

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

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

您需要只查找一个索引还是多个索引?您需要支持部分匹配吗?(到目前为止,建议的答案还没有考虑到这一点)无论如何,你为什么需要一个比你得到的更快的速度?我用一个包含112000个单词的数组测试了您的代码,它在0.023秒内执行。我在下面发布的方法花费了0.01秒。感谢您的重播,您提供了代码,但我需要作为iPhone联系人进行搜索-如果您的字符串=@“A”或@“An”,它应该获得“其他字符串”的索引,如0。您应该在原始帖子中提到这一点——这是一条关键信息。你只想要从搜索字符串开始的东西,还是在中间或结尾包含搜索字符串的东西?你所张贴的代码只会找到从搜索字符串开始的东西?你需要只找到一个索引,还是多个?你需要支持部分匹配吗?(到目前为止,建议的答案还没有考虑到这一点)无论如何,你为什么需要一个比你得到的更快的速度?我用一个包含112000个单词的数组测试了您的代码,它在0.023秒内执行。我在下面发布的方法花费了0.01秒。感谢您的重播,您提供了代码,但我需要作为iPhone联系人进行搜索-如果您的字符串=@“A”或@“An”,它应该获得“其他字符串”的索引,如0。您应该在原始帖子中提到这一点——这是一条关键信息。是否只需要以搜索字符串开头的内容,或者在中间或结尾包含搜索字符串的东西——你所张贴的代码只会发现从搜索字符串开始的东西。这个方法的一个问题是它不允许不区分大小写。这个方法的一个问题是它不允许不区分大小写。