1

我正在制作一个 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"

4

1 回答 1

0

两级方法(也称为索引)怎么样?

检查第一个字母并将带有该字母的所有单词加载到您的数组中。如果所有单词的加载时间都是7秒,那么对于有某个首字母的单词,平均应该是7s/24≈0.3s。

如果您没有第一个字母,您也可以使用最后一个、第二个等。为了支持这一点,您可以在 SQLite中创建索引。

于 2012-08-08T19:02:54.493 回答