Предположим, есть коллекция вида List<string>
, в ней очень большое число записей. Пользователь должен начинать вводить слово, а программа должна фильтровать список по введенным пользователем символам (от двух символов). То есть нужно быстро находить все значения из списка, которые содержат введенную пользователем подстроку. Можно это все фильтровать с помощью Where
и Contains
(или IndexOf
), но есть мнение, что на больших размерах коллекции это будет работать не очень шустро.
Есть какой-то способ ускорить поиск?
Можно создать такую структуру: Dictionary<string, List<string>>
При добавлении новой записи нужно выполнить такой код:
foreach (string substr in GetAllPossibleSubstrings(stringToByAdded))
dictionary[substr].Add(stringToByAdded);
Где GetAllPossibleSubstrings
ищет все возможные подстроки начиная с длины 2 (для вашего случая). В итоге поиск будет выполнятся за O(1)
:
List<string> searchResults = dictionary[searchQuery];
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
вот есть у меня список в xml файле, я по нему прохожусь и вывожу в textbox, но что если нужно добавить/удалить элемент в xml файле? как через код это...
Споткнулся в самом начале, не могу инициализировать список, видимо из-за того что список неизменяемый Как с ним работать? Как присвоить ему...
ЗдравствуйтеИз уроков в интернете на VS Express 2013 для Desktop "написал" сервер websocketов на C# для чата
В рамках урока по паттерну MVVM для приложений WPF мне нужно было добавить библиотеку SystemWindows