我正在编写一个程序,我想检查大约100个短语的16,000个字符串
我这样做的简单方法是两个for循环:
(导致1,600,000个字符串操作)
string[] phrases;
string[] texts;
for(int t_count = 0; t_count < 16000; t_count++)
{
for(int p_count = 0; p_count < 100; p_count++)
{
Regex pattern = new Regex(phrases[p_count]);
if (pattern.IsMatch(texts[t_count]))
{
//Save phrases[p_count]
break;
}
}
}
我认为必须有更有效的方法来做到这一点 欢迎任何建议。
编辑:@ J. Steen 当然它会跑得更快,但同时生产独角兽会很棒!答案 0 :(得分:9)
首先切换循环的顺序 - 而不是将100个正则表达式中的每一个编译16000次,这将编译一次:
for(int p_count = 0; p_count < 100; p_count++)
{
Regex pattern = new Regex(phrases[p_count]);
for(int t_count = 0; t_count < 16000; t_count++)
{
if (pattern.IsMatch(texts[t_count]))
{
//Do Something
}
}
}