2010-08-14 73 views
0

仍在通過此程序工作。我的待辦事項列表上的下一個任務是從預先生成的列表中選擇隨機單詞。我已經對隨機代碼進行了排序,但是現在我需要知道從我的大名單中存儲和檢索單詞的最佳方式(這是一個相當大的單子 - 超過220個單詞)。從文件中抓取文本

由於我在爲iPhone設計,內存是一個首要問題。正因爲如此,我希望避免將整個文件加載到內存中。我寧願讓文件佈置好,這樣我就可以直接跳到文件中的索引位置,只抓取我需要的數據。如果我可以使用我已經擁有的所有文字的文本文件,那將是很好的,但如果對其他方法有好處,我不介意轉換。

任何人都有最好的方法來做這個建議嗎?

-Ash

回答

0

不用擔心存儲空間(所需的存儲遠遠小於你認爲)。使用PLIST(文件>新建文件>資源(Mac OS X)>屬性列表)和arrayWithContentsOfFile以使單詞加載簡單(在PLIST中定義數組作爲根項目; Apple的文檔有更多細節)。然後,簡單地說:

srandom(time(NULL)); 
NSUInteger index = rand() % [array length]; 
NSString *word = [array objectAtIndex:index]; 
+0

謝謝!唉,一個解決方案只會帶來更多的問題,新的解決方案是我無法弄清楚如何檢索完整和正確的文件路徑到我的新.plist文件,以便我可以首先加載它。文件名是randomNames.plist,它似乎存儲在一個名爲Resources的目錄中。這是我目前的代碼,任何想法它有什麼問題? NSString * filePath = [[NSString alloc] initWithString:[[NSBundle mainBundle] pathForResource:@「randomNames」ofType:@「plist」inDirectory:@「Resources」]]; randomNames = [[NSArray alloc] initWithContentsOfFile:filePath]; – Ash 2010-08-14 14:48:08

+0

嘗試刪除'inDirectory:'。不應該需要它。 – 2010-08-14 15:28:53

1

那麼,220個單詞不完全是一個大列表:-)假設每個單詞很長,比如說20個字符。那麼你正在談論一個可憐的4.4kB。所以我不擔心這裏的大小。正如凱文指出的那樣,[NSArray arrayWithContentsOfFile:...]可能是最簡單的方法(也可以看看[NSDictionary dictionaryWithContentsOfFile:...])。

但是,如果你的列表變得非常大(比如10000字),那麼我建議你閱讀一下SQLite支持的SQLite。