use*_*718 0 c arrays lookup performance
我必须迭代一个包含大约100M行的日志文件.我必须为多个日志执行此操作.平均线长为110个字符.
目前我正在循环查看可能的匹配列表.我想知道是否有更好的方法吗?
char *in_array(char *car) {
// longer list than this...
char *carlist[] =
{
"Avalon",
"Azera",
"Cayenne",
"Civic",
"Corolla",
"Elantra",
"F-150",
"Hilux",
"Lexus LS",
"Rav 4",
"Sienna",
// etc...
};
char *match;
int i;
int n = sizeof(carlist)/sizeof(carlist[0]);
for(i = 0; i < n; i++)
{
match = strstr(car, carlist[i]);
if(match != NULL)
{
return strdup(match);
}
}
return strdup("No match");
}
Run Code Online (Sandbox Code Playgroud)
DFA(确定性有限自动机,多个自动机)可以比单独依次测试每个模式更快地匹配字符串与多个模式.
分析器生成器擅长自动构建DFA表.
缺点是当模式列表发生变化时必须重建DFA ...但由于您的模式列表当前是硬编码为数组,因此对您来说不应该有问题.
由于您使用的是C,flex因此是一个很好的工具.