Мне нужен быстрый метод, чтобы определить, находится ли данная строка в списке строк.
Список строк не известен до времени выполнения, но после этого он не изменится.
Я мог бы просто List<String>
назвать strings
и затем сделать:
if (strings.Contains(item))
Однако это будет работать плохо, если в списке много строк.
Я также мог бы использовать HashSet<String>
, но это потребовало бы вызова GetHashCode
для каждой входящей строки, а также Equals
, что было бы пустой тратой, если, например, есть. только 3 строки в списке. Я упоминал, что это должно быть быстро ?
Я мог бы при настройке решить использовать List
или HashSet
в зависимости от количества строк (например, использовать List для менее чем 10 строк, HashSet в противном случае), скорее как логика в HybridDictionary
.
Поскольку строки в формате Unicode, стандартная структура Trie не будет работать, хотя дерево Radix / Patricia trie могло бы работать. Есть ли хорошие реализации C # с тестами?
Некоторые упоминали, что обходили String
GetHashCode
и использовали более быструю хэш-функцию. Есть ли какие-то ориентиры?
Использование выражений LINQ для создания оптимизированного оператора switch является новым подходом, который выглядит очень интересным.
Что еще будет работать? Стоимость установки не важна, просто скорость поиска.
Если это имеет значение, входящие строковые значения редко появляются в списке.