在字符串快速的NSMutableArray中查找子字符串

时间:2014-10-30 07:19:24

标签: ios objective-c nsmutablearray string-comparison

我有一个类似

的数组
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作为子字符串。

哪种方法很快。

先谢谢。

1 个答案:

答案 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);