我有一个字符串列表,其中包含大小为152MB的文本文件中的约700万个项目。我想知道什么是实现一个函数的最佳方法,该函数接受一个字符串并返回它是否在该字符串列表中。
答案 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
)。在那里搜索匹配非常容易。