Быстрый нечеткий поиск по коллекции C#

346
05 октября 2017, 10:45

Предположим, есть коллекция вида List<string>, в ней очень большое число записей. Пользователь должен начинать вводить слово, а программа должна фильтровать список по введенным пользователем символам (от двух символов). То есть нужно быстро находить все значения из списка, которые содержат введенную пользователем подстроку. Можно это все фильтровать с помощью Where и Contains (или IndexOf), но есть мнение, что на больших размерах коллекции это будет работать не очень шустро. Есть какой-то способ ускорить поиск?

Answer 1

Можно создать такую структуру: Dictionary<string, List<string>>

При добавлении новой записи нужно выполнить такой код:

foreach (string substr in GetAllPossibleSubstrings(stringToByAdded))
    dictionary[substr].Add(stringToByAdded);

Где GetAllPossibleSubstrings ищет все возможные подстроки начиная с длины 2 (для вашего случая). В итоге поиск будет выполнятся за O(1):

List<string> searchResults = dictionary[searchQuery];
READ ALSO
редактирование xml файла в c#

редактирование xml файла в c#

вот есть у меня список в xml файле, я по нему прохожусь и вывожу в textbox, но что если нужно добавить/удалить элемент в xml файле? как через код это...

379
C# ImmutableList как им пользоваться?

C# ImmutableList как им пользоваться?

Споткнулся в самом начале, не могу инициализировать список, видимо из-за того что список неизменяемый Как с ним работать? Как присвоить ему...

291
Подключение к серверу websocket средствами php

Подключение к серверу websocket средствами php

ЗдравствуйтеИз уроков в интернете на VS Express 2013 для Desktop "написал" сервер websocketов на C# для чата

253
WPF&amp;MVVM: Библиотека System.Windows.Interactivity больше не доступна?

WPF&MVVM: Библиотека System.Windows.Interactivity больше не доступна?

В рамках урока по паттерну MVVM для приложений WPF мне нужно было добавить библиотеку SystemWindows

306