2011-03-21 72 views
1

在我的應用程序中,我必須搜索由核心數據請求獲取的數組中的NSString數組中的字符串。獲取的數組包含大約30,000個條目(並且它必然會增長),並且字符串數組可以達到數十萬個字符串。 我現在所做的是從核心數據存儲中選擇所有字符串,並循環遍歷字符串數組,創建一個NSPredicate並使用它來過濾Core Data獲取的數組。 我認爲,如果我事先排序兩個數組,可以縮小每個後續搜索的範圍,但是有可能使用謂詞搜索從某個位置開始的數組?核心數據,排序搜索 - 有可能嗎?

最好的問候, Timofey。

+0

您可以通過調用' - [NSFetchRequest setSortDescriptors:]'對從提取請求返回的結果進行排序。或者你需要比這更復雜的東西? – 2011-03-21 07:30:28

+0

嗯,我知道。事情是,首先想到的是比較數組元素,可以說,手動。即您遍歷其中一個數組,將當前元素與另一個數組的當前元素進行比較,如果它們相同,則繼續處理這兩個數組的下一個元素,如果它們不是,則繼續處理其中一個元素的下一個元素數組(現在我寫了它,這似乎是合理的解決方案)。但是有沒有更多的「自動」呢?它看起來像一個普通的taks。 – Ibolit 2011-03-21 08:16:14

+0

讓我確定我明白了。你是否想要做兩組字符串的聯合?兩者都可能非常大。一個或兩個存儲在覈心數據中? – 2011-03-29 11:58:30

回答

0

您不想從Core Data中獲取所有字符串。速度很慢,佔用大量內存。只需使用NSPredicate篩選出你想要的字符串,給它NSFetchRequest並只提取你想要的結果。您還可以將NSSortDescriptor添加到NSFetchRequest以將結果排序。

+0

事實上,與使用NSPredicate過濾結果相比,從數據存儲中獲取所有實體結果非常快。我通過其中一個字符串屬性對實體進行排序,這使我可以將它們與另一個經過排序的字符串數組進行比較。至於內存,據我所知,核心數據負責這一點,只有當相應的元素被訪問時才提取整個結果集的有限部分。 – Ibolit 2011-03-30 13:01:37