目前我正在使用NSPredicate从字符串中搜索。但我有大约2000条记录。因此,使用NSPredicate迭代这些记录以进行搜索需要一些时间。
我只是想知道NSPredicate是否在内部使用任何搜索算法,还是应该使用任何搜索算法进行快速搜索?
我想我的应用应该像联系人应用程序一样搜索(顺利)。我应该怎么做,以便我的搜索将像联系人应用程序一样顺利。
感谢。
答案 0 :(得分:3)
NSPredicate
不使用任何搜索算法 - 所有NSPredicate
都代表您的查询。
接受NSPredicate
作为选择搜索算法的选项是任务。在您的情况下,它可能是NSArray
的{{1}}方法?
如果你想更快地搜索数据,你必须自己编写一个更好的算法,我敢打赌,数组只会遍历每个项目并将其与谓词匹配。效率不高但适用于任何事情:)
尝试查看sqlite(或CoreData),它们比普通数组具有更好的索引。
或者你可以自己创建一个索引 - 将每个联系人放入一个字典中,密钥是联系人的第一个字母 - 这应该减少你必须搜索的记录数量!
即。而不是数组
filteredArrayUsingPredicate:
有一本字典
[ @"Alex", @"Bob", @"Bill", @"Carl" ... ]
对于搜索字符串{
@"A" : [ @"Alex" ],
@"B" : [ @"Bob", @"Bill" ],
@"C" : [ @"Carl" ]
...
}
,您只需搜索数组中@"Bi"
的项目。
PS别忘了让你的字典密钥案例/变音符号独立;)