NSPredicate在内部使用任何搜索算法?

时间:2012-04-01 12:06:58

标签: iphone algorithm search nspredicate

目前我正在使用NSPredicate从字符串中搜索。但我有大约2000条记录。因此,使用NSPredicate迭代这些记录以进行搜索需要一些时间。

我只是想知道NSPredicate是否在内部使用任何搜索算法,还是应该使用任何搜索算法进行快速搜索?

我想我的应用应该像联系人应用程序一样搜索(顺利)。我应该怎么做,以便我的搜索将像联系人应用程序一样顺利。

感谢。

1 个答案:

答案 0 :(得分:3)

NSPredicate不使用任何搜索算法 - 所有NSPredicate都代表您的查询。

接受NSPredicate作为选择搜索算法的选项是任务。在您的情况下,它可能是NSArray的{​​{1}}方法?

如果你想更快地搜索数据,你必须自己编写一个更好的算法,我敢打赌,数组只会遍历每个项目并将其与谓词匹配。效率不高但适用于任何事情:)

尝试查看sqlite(或CoreData),它们比普通数组具有更好的索引。

或者你可以自己创建一个索引 - 将每个联系人放入一个字典中,密钥是联系人的第一个字母 - 这应该减少你必须搜索的记录数量!

即。而不是数组

filteredArrayUsingPredicate:

有一本字典

[ @"Alex", @"Bob", @"Bill", @"Carl" ... ]

对于搜索字符串{ @"A" : [ @"Alex" ], @"B" : [ @"Bob", @"Bill" ], @"C" : [ @"Carl" ] ... } ,您只需搜索数组中@"Bi"的项目。

PS别忘了让你的字典密钥案例/变音符号独立;)