Ios NSArray作为核心数据获取请求中的参数
我有大约10000个实体的数据库和50个NSString元素的动态NSArray。要检查数据库中是否存在这些元素中的每一个,并创建存在的元素的新数组。我不需要返回整个实体,只需要返回那些NSString标题(与NSString数组中的标题相同) NSPredicate应将entity.title与NSString元素进行精确匹配的比较。Ios NSArray作为核心数据获取请求中的参数,ios,core-data,nsfetchrequest,Ios,Core Data,Nsfetchrequest,我有大约10000个实体的数据库和50个NSString元素的动态NSArray。要检查数据库中是否存在这些元素中的每一个,并创建存在的元素的新数组。我不需要返回整个实体,只需要返回那些NSString标题(与NSString数组中的标题相同) NSPredicate应将entity.title与NSString元素进行精确匹配的比较。 什么是最好且处理器/内存效率最高的方法?我认为您应该在谓词中使用“in”运算来获得结果。这使您可以利用数据库来执行比较,而不是带回所有10000条记录来进行比
什么是最好且处理器/内存效率最高的方法?我认为您应该在谓词中使用“in”运算来获得结果。这使您可以利用数据库来执行比较,而不是带回所有10000条记录来进行比较。如果采用这种方法,代码可能如下所示:
// Assuming that arrayName is your existing array of values to match, that
// EntityName is the object in CoreData that you’re looking at, and context
// is your moc
var newArray: [String] = []
let fetchRequest = NSFetchRequest<EntityName>(entityName: "EntityName")
fetchRequest.predicate = NSPredicate(format: "title in %@", arrayName)
do {
result = try context.fetch(fetchRequest)
for element in result {
newArray.append(element.title)
}
} catch {
… manage any errors …
}
//假设arrayName是要匹配的现有值数组
//EntityName是您正在查看的CoreData中的对象和上下文
//这是你的主运行中心吗
var newArray:[字符串]=[]
let fetchRequest=NSFetchRequest(entityName:“entityName”)
fetchRequest.predicate=NSPredicate(格式:“标题在%@”,arrayName)
做{
结果=try context.fetch(fetchRequest)
对于结果中的元素{
newArray.append(element.title)
}
}抓住{
…管理任何错误…
}
注意-我的目标是与Swift 3.0兼容的代码-不确定您的目标是否是Swift。谢谢。确切地说,我不想把整张桌子都拖走。核心数据应该完成所有工作。这个解决方案是最优的吗?如果没有更多的想法,我会检查这一点作为答案。如果你还没有标题属性,也可能值得在标题属性上添加索引。pbasdf建议的索引可能会很有用,具体取决于你应用程序中标题的使用情况,但除此之外,我不知道有什么可以提高这种方法的效率。我已经用索引测试过了。在现实场景中应该足够快。