У меня есть список строк, содержащий около 7 миллионов элементов в текстовом файле размером 152 МБ. Мне было интересно, как лучше всего реализовать функцию a, которая принимает одну строку и возвращает, находится ли она в этом списке строк.
Сопоставление строки в большом текстовом файле?
Ответы (2)
Вам придется сопоставлять этот текстовый файл несколько раз? Если это так, я бы создал файл HashSet<string>
. В противном случае просто прочитайте его построчно (я предполагаю, что в каждой строке есть одна строка) и посмотрите, совпадает ли он.
152 МБ ASCII в конечном итоге превратятся в более чем 300 МБ данных Unicode в памяти, но на современных машинах достаточно памяти, поэтому сохранение всей партии в HashSet<string>
действительно сделает повторные поиски очень быстрыми.
Абсолютно самый простой способ сделать это, вероятно, использовать File.ReadAllLines
, хотя это создаст массив, который затем будет отброшен - не очень хорошо для использования памяти, но, вероятно, не так уж плохо:
HashSet<string> strings = new HashSet<string>(File.ReadAllLines("data.txt"));
...
if (strings.Contains(stringToCheck))
{
...
}
Зависит от того, что вы хотите сделать. Если вы хотите повторять поиск совпадений снова и снова, я загружаю весь файл в память (в HashSet
). Там очень легко искать совпадения.