搜索另一个数组中的数组元素
我正在开发一个iPhone应用程序,用户输入几个单词,然后我需要查看它们(如果它们基本上存在)在本地硬编码的长单词中(我的例子更复杂,但可以说用户是输入5个城市名称,我需要查看我的一系列城市,并让他知道哪些属性存在)。
什么是解决这个问题的最好方法? 尤其是因为某些名字可能以句子的形式出现(例如,某人可以进入:“巴黎之城”,但我有“巴黎”,所以它仍然很好)。
有没有好的第三部分库? 我绝对可以尝试手动做到这一点,但我相信有一些更好的解决方案。
谢谢。
我会使用NSPredicate:
NSString *searchText = @"paris"; //user's input
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self LIKE[c] %@", searchText];
NSArray *results = [yourHardcodedArrayOfCities filteredArrayUsingPredicate:predicate];
这将填充*主结果与任何匹配的结果。 谓词中的[c]指定不区分大小写,所以巴黎将匹配巴黎或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
使用std :: string的find
userInput和predefinedPhrase都是std :: string
for userInput in userInputList
for predefinedPhrase in your predefinedPhraseSet
test userInput.find(predefinedPhrase);
我首先试着避免遍历预定义的PraseraseSet,因为它可能很大。
但我想没有其他办法了,另一个解决方案(带谓词)似乎也是这样做的。