【发布时间】:2011-02-09 14:27:05
【问题描述】:
我在一个大小为 152MB 的文本文件中有一个包含大约 700 万个项目的字符串列表。我想知道实现一个函数的最佳方法是什么,该函数接受一个字符串并返回它是否在那个字符串列表中。
【问题讨论】:
我在一个大小为 152MB 的文本文件中有一个包含大约 700 万个项目的字符串列表。我想知道实现一个函数的最佳方法是什么,该函数接受一个字符串并返回它是否在那个字符串列表中。
【问题讨论】:
您是否需要多次匹配此文本文件?如果是这样,我会创建一个HashSet<string>。否则,只需逐行读取(我假设每行有一个字符串)并查看它是否匹配。
152MB 的 ASCII 码最终会在内存中超过 300MB 的 Unicode 数据 - 但在现代机器中有足够的内存,因此将全部保存在 HashSet<string> 中确实会使重复查找非常快。
执行此操作的绝对最简单方法可能是使用File.ReadAllLines,尽管这会创建一个随后将被丢弃的数组 - 不利于内存使用,但可能还不错:
HashSet<string> strings = new HashSet<string>(File.ReadAllLines("data.txt"));
...
if (strings.Contains(stringToCheck))
{
...
}
【讨论】:
取决于你想做什么。当您想一次又一次地重复搜索匹配项时,我会将整个文件加载到内存中(加载到 HashSet 中)。在那里很容易搜索匹配项。
【讨论】: