【问题标题】:Core Data, sorted search — is it possible?核心数据,排序搜索——有可能吗?
【发布时间】:2023-04-06 13:20:01
【问题描述】:

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

最好的问候, 蒂莫菲。

【问题讨论】:

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

标签: cocoa search core-data


【解决方案1】:

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

【讨论】:

  • 事实上,与使用 NSPredicate 过滤结果相比,从数据存储中获取所有实体的速度非常快。我确实通过它们的一个字符串属性对实体进行排序,这允许我将它们与另一个排序的字符串数组进行比较。至于内存,据我了解,Core Data 负责处理,仅在访问相应元素时才获取整个结果集的有限部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多