8

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

4

2 回答 2

6

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

152MB 的 ASCII 最终会在内存中超过 300MB 的 Unicode 数据——但在现代机器中有足够的内存,所以将全部保存在 aHashSet<string>中将使重复查找确实非常快。

简单的方法可能是使用File.ReadAllLines,尽管这将创建一个数组,然后将其丢弃 - 对内存使用不是很好,但可能还不错:

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

if (strings.Contains(stringToCheck))
{
    ...
}
于 2010-04-19T08:36:21.583 回答
3

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

于 2010-04-19T08:37:12.690 回答