Я предполагаю, что вы пытаетесь найти совпадения, которые StartsWith
, EndWith
или Contains
некоторый поисковый запрос. Если это так, то вы правы в том, что List
не идеален. Я не верю, что Hashset
лучше.
Проверьте trie. Я бы не построил один, но если даёт некоторый контекст проблемного пространства. Алгоритм включает группировку слов по их исходным словам подстрочной группы на основе их первой буквы, затем подгруппы по второй букве и т. Д.
Когда я это делал в прошлом, я использовал класс Lookup, а также реализовал Dictionary<string, List<string>>
.
алгоритм я использовал примерно
var dictionary = new Dictionary<int, Lookup<string, string>>();
for (int i = 1; i < maxWordLength; i++)
{
// get all words with i or more letters
dictionary.Add(i, words.ToLookup(w => w.Substring(i)));
}
, а затем найти такое слово, как
var word = "TestWord";
var matches = dictionary[word.Length][word];
Если вам также необходимо EndsWith
и Contains
вы вероятно, потребуется несколько индексных структур для тех, слишком.
в случае сомнений, измерить –
'StartsWith' и, путем сохранения обращенных строк или индексирование наизнанку,' EndsWith' может извлечь выгоду из отсортированного структуры, например, двоичное дерево. «Содержит» не допускает повышения производительности довольно легко, хотя длина может быть полезной лакомый кусочек. – HABO