我正在开发一个iphone应用程序,用户输入几个单词,然后我需要查找它们(如果它们基本上存在)在本地硬编码的长字词组中(我的情况解释起来比较复杂,但是我们说一个用户正在输入5个城市名称,我需要查找我的城市数组,让他知道存在哪些城市。
解决这个问题的最佳方法是什么?特别是因为有些名字可以用句子格式找到(例如,有人可以输入:“巴黎之城”,但我有“巴黎”,所以它仍然很好。)
是否有任何好的第三部分lib可能?我绝对可以尝试手动完成,但我相信有更好的解决方案。
感谢。
答案 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,因为它可能很大 但我想没有别的办法,另一种解决方案(带谓词)似乎也是如此。