在CoreData

时间:2017-08-04 19:32:32

标签: ios core-data

我有20k个独特的标签,每个标签都有自己的实体,并拥有自己的标题。

鉴于其标题,访问实体的最快方式是什么?

我知道这可以使用谓词来完成,就像这样

fetch.predicate = NSPredicate(format: "title contains %@", "example title")

我对这种方法的问题是,它涉及搜索20k实体中的每一个,直到找到正确的实体。

有没有办法做到这一点,所有标题都以某种方式编入索引,我可以立即访问任何标签?类似于您可以使用array['item_name']即时访问关联数组中的项目。

感谢。

1 个答案:

答案 0 :(得分:0)

使用谓词是你如何使用核心数据。

在你做任何事之前,这实际上是一个问题吗?你没有提到你已经看到任何性能问题。你有没有,或者这仍然是一个理论问题?

您可以通过确保"索引"来提高效果。在Core Data模型编辑器中检查此属性的框。您还可以考虑向实体添加一个字段,该字段包含标题的数字哈希值,并根据哈希值进行提取。您仍在搜索每个实体,但您正在进行数字比较而不是字符串。你不可能进行子串搜索(正如你使用contains所暗示的那样),但你会做一个与关联数组相同的事情(也就是这个原因,也称为哈希)。

如果这些都不够好并且您经常搜索字符串,那么您需要调查更适合您需求的不同数据模型 - 例如构建trie结构快速搜索。