在另一个数组中搜索数组元素 - iphone app

时间:2011-11-01 16:54:36

标签: iphone ios xcode search

我正在开发一个iphone应用程序,用户输入几个单词,然后我需要查找它们(如果它们基本上存在)在本地硬编码的长字词组中(我的情况解释起来比较复杂,但是我们说一个用户正在输入5个城市名称,我需要查找我的城市数组,让他知道存在哪些城市。

解决这个问题的最佳方法是什么?特别是因为有些名字可以用句子格式找到(例如,有人可以输入:“巴黎之城”,但我有“巴黎”,所以它仍然很好。)

是否有任何好的第三部分lib可能?我绝对可以尝试手动完成,但我相信有更好的解决方案。

感谢。

2 个答案:

答案 0 :(得分:4)

我会使用NSPredicate:

NSString *searchText = @"paris";  //user's input 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self LIKE[c] %@", searchText]; 
NSArray *results = [yourHardcodedArrayOfCities filteredArrayUsingPredicate:predicate];

这将使用主阵列的任何匹配结果填充*结果。谓词中的[c]指定不区分大小写,因此Paris将匹配paris或pArI。

已编辑添加

在谓词中使用LIKE(如我的原始答案中所示),如果您的搜索文本是一个句子,则更容易使用CONTAINS查找匹配项。所以,你可以使用:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self CONTAINS[c] %@", searchText];

结果相同,但有点容易。这样,如果搜索字符串是“纽约市”或“纽约市”,它仍将匹配您在“纽约”的硬编码条目。

以下是使用谓词的Apple文档,您可能会觉得这些谓词很有用:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pUsing.html

答案 1 :(得分:0)

使用std :: string的find

userInput和predefinedPhrase都是std :: string

for userInput in userInputList
  for predefinedPhrase in your predefinedPhraseSet
    test userInput.find(predefinedPhrase);

我首先尝试避免迭代您的predefinedPhraseSet,因为它可能很大 但我想没有别的办法,另一种解决方案(带谓词)似乎也是如此。