I was wondering if .NET offers any standard functionality for doing a prefix search through a list or a dictionary object. I came across the StringDictionary
, but couldn't figure out if it can do that for me.
And if it can do a prefix search, can it also do substring search or let me search using something like a regular expression?
Thanks in advance.
StringDictionary
is merely a hash table where the keys and values arestring
s. This existed before generics (whenDictionary<string, string>
was not possible).The data structure that you want here is a trie. There are implementations on CodeProject:
Or, if you're that kind of guy, roll your own (see CLRS).
I made a generic implementation of this available here.
Since
string
implementsIEnumerable<char>
, you can use it withchar
as parameter forTKeyElement
.I don't believe StringDictionary supports a prefix search, but if you use a
SortedList<,>
you can binary search through the range of keys until you find the first entry before and after your prefix.I think the
StringDictionary
is old school (pre-generics). You should probably use aDictionary(Of String, String)
instead because it implements IEnumerable (think LINQ). One extremely lame thing about StringDictionary is that it's case-insensitive.