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

Tas*_*han 8 c# string text matching

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

Jon*_*eet 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))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • @Taz:请求的数量是无关紧要的,只要你只构建一次你的hashmap :)根据文档:*这种类型的任何公共静态成员都是线程安全的*,所以这里也没问题 (2认同)
  • @Nayan:使用合适的数据库! (2认同)