我正在研究斯坦福CS193p的SmashTag流行提及任務(asst。#5),並且我已經有了一切正常工作。我正在研究額外任務#3:CS193P Smashtag Popularity Extra Task#3 - 只使用「IN」關鍵字獲取新推文
通過查詢數據庫中現有的實例加載大量數據,然後一次又一次地重複插入(如我們在演講中所做的一樣) ),表現可能相當差。通過在一個查詢中檢查數據庫中存在的一堆東西(然後僅創建不存在的東西),增強您的應用程序以使其更高效。謂詞操作符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是不是在陣列中的數據庫推文Twitter.Tweet
s將與IN
謂詞運算符一起工作。是否有人這樣做並可以提供一些見解?
注:我見過的許多解決方案都有一個用於搜索術語(通常稱爲查詢)的核心數據實體。我沒有這個,只有Tweet和Mention的實體,並且我有一切正常工作。
但如果想法是隻從數據庫中找到新的推文,不要那些推文需要在數據庫中?所以你必須在所有下載的tweets上運行你的tweet-entity-creator函數(tweetForTweetWithTwitterInfo在講座中),然後在新的數據庫中搜索與下載的tweet相匹配的tweets。如果重點僅僅是爲新推文運行創建者函數,這是太多工作。我在這裏錯過了什麼嗎? –