【发布时间】:2014-01-09 10:21:54
【问题描述】:
我正在开发一个示例应用程序,当用户每次在搜索栏中输入任何字符时,我都必须根据输入的字符过滤 200,000 个NSDictionary 元素中的NSArray。 NSDictionary 仅包含两个键,即“English”和“Meaning”;
到目前为止,我在 UISearchBar delegate 方法中执行以下操作
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"%K contains[cd] %@",@"English",searchText];
_searchResult = [_dictionaryData filteredArrayUsingPredicate:searchPredicate];
}
我觉得这不是一个合适的方法,过滤也需要时间。
附注- NSArray 我正在使用核心数据填充
【问题讨论】:
-
如果有人不知道:10 万 = 100000。
-
如果数据来自核心数据获取请求,那么这可能会有所帮助:stackoverflow.com/a/21002171/1187415。
-
使用TRIE类型的数据结构。en.wikipedia.org/wiki/Trie
-
@MartinR 该答案建议(在您的共享链接中)我已经在做。当应用程序启动时,我将数据加载到一个数组中并将该数组用作数据源,我不会每次都访问磁盘。
-
我很想知道它的性能。搜索 200K 记录,在移动设备上,任何时候你输入一个字符......所以,如果“e”你有 199K 的点击,你把它们全部返回?还是“The”,45K 次点击?编写软件规范的人到底在想什么?