【发布时间】:2017-02-24 02:25:12
【问题描述】:
我正在处理斯坦福 CS193p 的 SmashTag 人气提及作业(助理 #5),并且一切正常。我正在处理额外任务 #3:
通过查询数据库中的现有实例来加载大量数据,然后一遍又一遍地插入(如果没有找到)(就像我们在讲座中所做的那样),性能可能会很差。通过在一个查询中检查您希望在数据库中存在的一堆东西(然后只创建不存在的东西)来增强您的应用程序以提高效率。谓词运算符 IN 在这里可能很有价值。
我已经设法做到了类似这样的事情,但没有使用IN 谓词运算符!这是在我的updateDatabase(with newTweets:) 方法的perform 块内:(我已经调用了我的核心数据实体CDTweet
if let databaseTweets = try? globalContext!.fetch(NSFetchRequest<CDTweet>(entityName: "CDTweet")) {
let databaseIDs = databaseTweets.map { $0.id! }
for twitterInfo in newTweets where !databaseIDs.contains(twitterInfo.id) {
_ = CDTweet.createCDTweet(with: twitterInfo, into: globalContext!)
}
}
如您所见,我获取了数据库中的所有推文,获取了它们的 ID,然后仅为 ID 不在数据库推文数组中的 internet-fetched-Twitter.Tweets 创建一条新推文。
这似乎运行正常(即,仅创建新推文),但我很好奇讲师如何想象它会与 IN 谓词运算符一起使用。有没有人这样做并且可以提供一些见解?
注意:我见过的许多解决方案都有一个用于搜索词的核心数据实体(通常称为查询)。我没有这个,只有 Tweet 和 Mention 的实体,而且一切正常。
【问题讨论】: