我有一个类似
的数组NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"How many degrees ", @"Which club degree", @"body building", nil];
想要过滤那些包含度数的字符串。我使用旧的IOS,我没有[string stringcontains]
方法
必需的数组必须具有 - > 1.多少度2.哪个俱乐部学位
我使用的第一种方法
NSString *strToMatch=@"degree";
for (NSString *description in arr)
{
NSComparisonResult result = [description compare:strToMatch options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [strToMatch length])];
if (result == NSOrderedSame)
{
// statement to run on comparison succeeded..
}
}
第二种方法
for (NSString *description in arr)
{
if ([description rangeOfString:strToMatch options:NSCaseInsensitiveSearch].location != NSNotFound)
{
NSLog(@"I am matched....");
}
}
工作正常。我已经向您展示了比较单个字符串的代码,但我必须将此数组与另一个字符串数组进行比较。我想加快我的代码。还有其他更好的方法可以找到它。
我们如何创建一个NSPredicate来比较两个字符串数组。在第二个数组中找到第一个字符串arrray作为子字符串。
哪种方法很快。
先谢谢。
答案 0 :(得分:3)
您可以使用iOS 3.0中提供的NSPredicate
和-[NSArray filteredArrayUsingPredicate:]
NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"How many degrees ", @"Which club degree", @"body building", nil];
NSString *searchText = @"degree";
NSArray *filtered = [arr filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self contains %@", searchText]];
对于不区分大小写和不带变音符号的搜索,请使用
NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"How many degrees ", @"Which club degree", @"body building", nil];
NSString *searchText = @"deGree";
NSArray *filtered = [arr filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self contains[cd] %@", searchText]];
如果要在另一个数组中搜索关键字数组,可以使用iOS 3.0中提供的NSCompoundPredicate
。
NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"How many degrees ", @"Which club degree", @"body building", @"hello world" , nil];
NSArray *keywordsToSearch = @[@"deGree", @"world"];
NSMutableArray *predicates = [NSMutableArray new];
for (NSString *keyword in keywordsToSearch) {
[predicates addObject:[NSPredicate predicateWithFormat:@"self contains[cd] %@", keyword]];
}
NSPredicate *wholePredicate = [NSCompoundPredicate orPredicateWithSubpredicates:predicates];
NSArray *filtered = [arr filteredArrayUsingPredicate:wholePredicate];
您也可以查看效果并选择最佳效果。
NSTimeInterval startTime = [[NSDate date] timeIntervalSince1970];
// .... here searching code
NSTimeInterval endTime = [[NSDate date] timeIntervalSince1970];
NSLog(@"Duration %f", endTime - startTime);