[英]How can I leverage alphabetical order when searching a large string with regex?
我正在制作iPhone文字游戲。 我有一個文本文件,其中包含用換行符分隔的每個英語單詞。
我嘗試了幾種檢查有效單詞的方法。 使用SQLite數據庫幾乎可以立即加載,但是搜索時間太長。 我可以在游戲加載時將所有內容加載到數組中,但是對於使用了兩年的iPod來說,這大約需要7秒鍾。 雖然搜索很快。 我發現最好的平衡是將整個文件加載到NSString
並執行正則表達式:
NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:[NSString stringWithFormat:@"\n%@\n", word] options:NSRegularExpressionCaseInsensitive error:&error];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:self.words options:0 range:NSMakeRange(0, [self.words length])];
NSLog(@"%i matches found", numberOfMatches);
但是,這並沒有利用列表按字母順序排列的事實。 我如何利用這一事實來更快地做到這一點?
一種轉折是我允許人們使用通配符,因此正則表達式可能類似於: @"wo.d"
兩級方法又稱為索引怎么樣?
檢查第一個字母並將所有帶有該字母的單詞加載到數組中。 如果所有單詞的加載時間為7秒,則對於帶有某個起始字母的單詞,平均加載時間應為7s /24≈0.3s。
如果沒有首字母,也可以使用最后一個,第二個等。 為此,您可以在SQLite中創建索引 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.