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