- (void)viewDidLoad { [super viewDidLoad]; searchArray = [[NSMutableArray alloc] init]; NSArray *arrayy =[NSArray arrayWithObjects:@"李小花",@"李小明",@"李小小",@"孙小雷",@"刘明",@"Adbey",@"hahn",@"adBey",@"小小",@"Banana One",nil]; NSString *key = @"李小"; [self userFuzzySearch:arrayy keyStr:key]; if([searchArray count] < 1) NSLog(@"No Data!"); else NSLog(@"%@",searchArray); } //不连续搜索 - (void)userFuzzySearch:(NSArray *)dataArray keyStr:(NSString *)key{ if([dataArray count] < 1) return; NSString *searchData = @""; searchData = [NSString stringWithCString:[key UTF8String] encoding:NSUTF8StringEncoding]; if([searchData length] > 0) { for(int i=0; i<[dataArray count];i++) { NSString *data = @""; if(![searchData canBeConvertedToEncoding:NSASCIIStringEncoding]) { data = [dataArray objectAtIndex:i]; }else { data = [dataArray objectAtIndex:i]; NSMutableString *pinyin = [[NSMutableString alloc] init]; for(int i=0; i<[data length];i++) { NSString *str =[[NSString stringWithFormat:@"%c",pinyinFirstLetter([data characterAtIndex:i])] uppercaseString]; [pinyin appendString:str]; } if([pinyin length] > 0) data = pinyin; } int currentLocation = 0; [self searchDataInString:data fullString:[dataArray objectAtIndex:i] withSearchText:searchData withLocation:currentLocation]; } } } -(void)searchDataInString:(NSString *)data fullString:(NSString *)fullData withSearchText:(NSString *)searchText withLocation:(int)location{ if([data length] > location) { NSComparisonResult result = [data compare:searchText options:NSCaseInsensitiveSearch range:NSMakeRange(location, [searchText length])]; if (result == NSOrderedSame) { [searchArray addObject:fullData]; }else { location++; [self searchDataInString:data fullString:fullData withSearchText:searchText withLocation:location]; } } } |
|