[英]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.