Соответствует строка в большом текстовом файле? - PullRequest
8 голосов
/ 19 апреля 2010

У меня есть список строк, содержащий около 7 миллионов элементов в текстовом файле размером 152 МБ. Мне было интересно, что может быть лучшим способом реализовать функцию, которая принимает одну строку и возвращает ли она в этом списке строк.

Ответы [ 2 ]

6 голосов
/ 19 апреля 2010

Вам придется сопоставлять этот текстовый файл несколько раз? Если так, я бы создал HashSet<string>. В противном случае, просто прочитайте его построчно (я предполагаю, что в строке одна строка) и посмотрите, соответствует ли оно.

152 МБ ASCII закончится как более 300 МБ данных Unicode в памяти - но на современных машинах достаточно памяти, поэтому сохранение всего лота в HashSet<string> сделает повторные поиски действительно очень быстрыми.

Абсолютный самый простой способ сделать это, вероятно, использовать File.ReadAllLines, хотя это создаст массив, который затем будет отброшен - не очень хорошо для использования памяти, но, вероятно, не так уж плохо:

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

if (strings.Contains(stringToCheck))
{
    ...
}
3 голосов
/ 19 апреля 2010

Зависит от того, что вы хотите сделать. Когда вы хотите повторять поиск совпадений снова и снова, я загружаю весь файл в память (в HashSet). Там очень легко искать совпадения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...