如何使用搜索栏扩展搜索

时间:2014-02-17 21:32:24

标签: objective-c uisearchbar nsrange

我想在其中搜索包含字符串的数组。因此我使用搜索栏。 这是我的代码:

for(NSString *string in itemsArray)
{
   NSRange nameRange = [string rangeOfString:text options:NSCaseInsensitiveSearch];
   if (nameRange.location != NSNotFound)
   {
      [filteredItemsArray addObject:string];
   }
}

它工作得很好,但问题是它只是在我以完全相同的方式写入时找到字符串(除了不区分大小写)。 但即使字符串不符合100%,我也想找到它。例如,当我搜索'Ralle Turner'时,它也应该找到带有'Ralle / Ralph Turner'的字符串。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您需要将搜索字符串拆分为单词,然后遍历每个单词以查找匹配项。

您可以在循环中使用此代码分割字符串

for(NSString *string in itemsArray)
{
    NSArray *words = [text componentsSeparatedByString:@" "];
    for (NSString *word in words)
    {
        NSRange nameRange = [string rangeOfString:word options:NSCaseInsensitiveSearch];
        if (nameRange.location != NSNotFound)
        {
           [filteredItemsArray addObject:string];
           break;
        }
    }
}

答案 1 :(得分:0)

您可以计算两个字符串的levenshtein distance以查看是否存在潜在匹配。 您可以在Web上轻松找到一些实现,例如:

- via NSString Category

- via a single method

或者使用其中一个approximate string matching algorithms