核心数据,排序搜索——有可能吗?

Posted

技术标签:

【中文标题】核心数据,排序搜索——有可能吗?【英文标题】:Core Data, sorted search — is it possible? 【发布时间】:2011-03-21 07:14:46 【问题描述】:

在我的应用程序中,我必须从核心数据请求获取的数组中的 NSStrings 数组中搜索字符串。 fetched 数组包含大约 30,000 个条目(并且它必然会增长),而 strings 数组可以多达数十万个字符串。 我现在要做的是从核心数据存储中选择所有字符串,并循环遍历字符串数组,创建一个 NSPredicate 并使用它来过滤核心数据获取的数组。 我认为如果我事先对两个数组进行排序,这样可以缩小每个后续搜索的范围,但是是否有可能使用谓词从某个位置开始搜索数组?

最好的问候, 蒂莫菲。

【问题讨论】:

您可以调用-[NSFetchRequest setSortDescriptors:]对fetch请求返回的结果进行排序。还是您需要比这更复杂的东西? 嗯,我知道。问题是,首先想到的是手动比较数组元素。 IE。您遍历其中一个数组,将当前元素与另一个数组的当前元素进行比较,如果相等,则继续处理两个数组的下一个元素,如果不相等,则继续处理其中一个的下一个元素数组(现在我已经写了它,这似乎是 合理的解决方案)。但是还有什么更“自动”的吗?它看起来很常见。 让我确保我理解。您是否要合并两组字符串?两者都可能非常大。一个或两个都存储在核心数据中吗? 不完全是。我需要知道我作为输入数组(未存储)的字符串是否存在于存储中,如果存在,它们在持久存储中具有哪些属性。只存储其中一个。 【参考方案1】:

您不想从 Core Data 中获取所有字符串。它很慢并且占用大量内存。只需使用 NSPredicate 过滤掉你想要的字符串,给它 NSFetchRequest 并只获取你想要的结果。您还可以将 NSSortDescriptor 添加到 NSFetchRequest 以对结果进行排序。

【讨论】:

事实上,与使用 NSPredicate 过滤结果相比,从数据存储中获取所有实体的速度非常快。我确实通过它们的一个字符串属性对实体进行排序,这允许我将它们与另一个排序的字符串数组进行比较。至于内存,据我了解,Core Data 负责处理,仅在访问相应元素时才获取整个结果集的有限部分。

以上是关于核心数据,排序搜索——有可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

有序核心数据关系 - 如何管理或默认排序是什么?

浅谈2021搜索引擎几大核心算法,网站专利解读,值得一阅

核心数据 - 可以使用 NSSortDescriptor 中的块对 TableView 进行排序吗?

按日期和字符对核心数据属性进行排序

使用 NSFetchedResultsController 对核心数据对象进行排序

在 Swift 中自动重新排序核心数据