匹配大文本文件中的字符串?

时间:2010-04-19 08:33:12

标签: c# string text matching

我有一个字符串列表,其中包含大小为152MB的文本文件中的约700万个项目。我想知道什么是实现一个函数的最佳方法,该函数接受一个字符串并返回它是否在该字符串列表中。

2 个答案:

答案 0 :(得分:6)

您是否需要多次匹配此文本文件?如果是这样,我会创建一个HashSet<string>。否则,只需逐行阅读(我假设每行有一个字符串)并查看它是否匹配。

152MB的ASCII最终会在内存中超过300MB的Unicode数据 - 但是在现代机器中有足够的内存,因此将整个数据保留在HashSet<string>中会使重复查找的速度非常快。

绝对最简单的方法可能是使用File.ReadAllLines,虽然这将创建一个数组,然后将被丢弃 - 不是很好的内存使用,但可能不是太糟糕:

HashSet<string> strings = new HashSet<string>(File.ReadAllLines("data.txt"));
...

if (strings.Contains(stringToCheck))
{
    ...
}

答案 1 :(得分:3)

取决于你想做什么。当你想一次又一次地重复搜索匹配时,我会将整个文件加载到内存中(进入HashSet)。在那里搜索匹配非常容易。