【发布时间】:2015-01-25 15:53:17
【问题描述】:
我必须遍历一个包含大约 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");
}
【问题讨论】:
-
你可以使用
bsearch()。 -
@iharob:
bsearch()不起作用,因为它是子字符串比较。这不是具有给定术语的数组查找。 -
@iharob 使用 bsearch,我是否能够从匹配而不是从数组中获取返回值?例如,返回
Elantra13,而不是Elantra? -
考虑使用数据库?
-
也许没有(不必要的)
strdup?
标签: c arrays performance lookup