Мне нужно выполнить некоторые операции поиска для коллекции предметов.
Сначала мне нужно проверить, есть ли прямое совпадение.Это довольно просто, так как у меня есть записи в Dictionary<String,MyObjectType>
, так что я могу просто пойти dictionary["valuetofind"]
.
Если, однако, прямого совпадения нет, тогда мне нужно начать матч с началом, ноэто должно быть самое длинное совпадение, которое возвращается:
Примеры записей:
String Record
0 A
01 B
012 D
02 B
03 C
Примеры запросов:
Query Result
0 A - Because 0 is the longest match
01 B - Because 01 is the longest match
023456 B - Because 02 is the longest match
012 D - Because 012 is the longest match
0123456 D - Because 012 is the longest match
03456 C - Because 03 is the longest match
04 A - Because 0 is the longest match
0456 A - Because 0 is the longest match
1 Null - No Match
Существуют ли в структуре классы, имеющие хэшиили древовидные структуры в фоновой реализации для выполнения чего-то подобного, или мне нужно написать что-то самому?
РЕДАКТИРОВАНИЕ Пока у меня есть список, отсортированный по длине строки шаблонаи затем я просматриваю записи по очереди, чтобы увидеть, начинается ли запрос с записи.Это работает нормально для большинства ситуаций, так как у нас нет больших списков (пока), но стоит дорого для ситуаций, когда нет совпадений.
Мне не хватает словарного запаса, чтобы Google дал мнестраницы, не относящиеся к хэш-наборам, спискам и словарям.Все исследования, которые я обнаружил, указывают на древовидные структуры, но никто не указывает, есть ли уже реализация в .NET Framework или нет.