繁体   English   中英

使用正则表达式搜索大字符串时,如何利用字母顺序?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM