Префикс поиска по списку / словарю с использованием .NET StringDictionary? - PullRequest
2 голосов
/ 14 декабря 2009

Мне было интересно, предлагает ли .NET какую-либо стандартную функциональность для поиска по префиксу по списку или по словарному объекту. Я наткнулся на StringDictionary, но не мог понять, сможет ли он сделать это для меня.

И если он может выполнять поиск по префиксу, может ли он выполнять поиск по подстроке или разрешить поиск с использованием чего-то вроде регулярного выражения?

Заранее спасибо.

Ответы [ 4 ]

5 голосов
/ 14 декабря 2009

StringDictionary - это просто хеш-таблица, ключами и значениями которой являются string с. Это существовало до обобщения (когда Dictionary<string, string> было невозможно).

Здесь вам нужна структура данных trie . Есть реализации на CodeProject :

  1. Реализация телефонного справочника с использованием TRIE
  2. Дерево префиксов многократного использования с использованием обобщений в C # 2.0

Или, если вы такой парень, бросьте свой собственный (см CLRS ).

4 голосов
/ 14 декабря 2009

Я не верю, что StringDictionary поддерживает поиск по префиксу, но если вы используете SortedList<,>, вы можете выполнять двоичный поиск по диапазону ключей, пока не найдете первую запись до и после префикса.

2 голосов
/ 14 декабря 2009

Я думаю, StringDictionary - это старая школа (пре-дженерики). Вы, вероятно, должны использовать Dictionary(Of String, String) вместо этого, потому что он реализует IEnumerable (подумайте LINQ). * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * [0004]

0 голосов
/ 13 июня 2019

Я сделал общую реализацию этого доступного здесь .

Поскольку string реализует IEnumerable<char>, вы можете использовать его с char в качестве параметра для TKeyElement.

...