Эффективный поиск NameValueCollection - PullRequest
3 голосов
/ 08 августа 2009

Есть ли способ извлечь ключи из коллекции NameValueCollection, которые относятся к определенному соглашению об именах и шаблонах, без необходимости перебирать все значения в коллекции?

Ответы [ 3 ]

6 голосов
/ 08 августа 2009

Коллекция значений имени не предназначена для того, чтобы быть особенно эффективной при таком поиске Какой бы метод вы ни использовали, он должен пройти все пункты. Вы можете использовать LINQ; что-то вроде:

col.Keys.OfType<string>().Where(s => s.StartsWith("SomeString"))
2 голосов
/ 08 августа 2009

Возможно, вы сможете комбинировать магию регулярных выражений и linq, но в конце всего этого вам нужно будет пройтись по каждому значению, чтобы проверить их. Если вы используете linq, вам не нужно будет писать итерации, но под капотом они все равно будут выполнены.

Если вам действительно нужно ускорить процесс, вам нужно посмотреть, к каким соглашениям о шаблонах и именах вы подходите, а затем создать доступную для поиска структуру данных, соответствующую этим потребностям.

0 голосов
/ 08 августа 2009

Два комментария:

1) Ваш вопрос слишком расплывчатый. Существует множество структур данных, таких как суффиксы и префиксы, варианты на красно-черных деревьях и т. Д., Которые поддерживают эффективный поиск. Полезный ответ на ваш вопрос зависит от того, какой именно шаблон / соглашение об именах вы ищете. Разместите пример ввода и ожидаемый результат.

2) Нет смысла внедрять сложную структуру данных, если она вам действительно не нужна. Первый вопрос, который вы должны задать себе: действительно ли вам нужна эффективность: для коллекции, содержащей менее 50 000 элементов, я действительно сомневаюсь, что вы заметите ощутимую разницу в памяти, процессоре или производительности при поиске ваших ключей с причудливой структурой данных, чем просто линейный поиск.

...