2012-04-05 2 views
0

Там объект словарь, который загружается со следующими основными величинами: 189a 189b 189с 201а 201bЕсть ли способ найти только часть значения ключа в словаре?

В большинстве случаев, жизнь хороша, и нужны все отдельные ключевые ценности/уникальный , Но в определенных ситуациях ключи с буквами за ними (то есть ... 189a, 189b, 189c) означают одно и то же (то есть ... 189). Поэтому мне нужно выяснить, существует ли ключевое значение (например, метод holdskey) только для первой части ключа, а затем для возврата true.
Любые идеи о том, как это сделать?

+0

Поиск будет «O (n)», который, вероятно, победит всю цель хеш-таблицы в первую очередь. –

+0

В качестве альтернативы, если vb.net относительно объектно-ориентирован, то вы можете создать свой собственный класс, который вы используете для ключа, и определить его хэш и равные методы соответствующим образом, чтобы 189a, 189b и 189c были «равными». –

+0

@MikeChristensen В зависимости от частоты и характера поиска, это не может быть большой проблемой. Из вопроса не ясно, что проверка наличия ключа с указанным форматом является регулярным использованием коллекции. Если это не так, то использование не хешированного набора может быть совершенно законным. – PinnyM

ответ

1

Что-то вроде этого?

dictionary.Keys.Any(Function(key) key.StartsWith("189")) 

или вы можете использовать Regex для получения дополнительного находки зерен управления:

dictionary.Keys.Any(Function(key) Regex.IsMatch(key, "^189[^\d]?") 
+0

Обратите внимание: этот вопрос отмечен 'VB.Net' –

+0

Право, обновлено. – PinnyM

+0

Это действительно работает очень хорошо. Единственная проблема, которую я мог предвидеть, заключается в том, что словарь также содержит значение «1891», а затем он вызывает ложное срабатывание. Было бы лучше попытаться отфильтровать письмо в конце; так как у него будет только одна буква в конце номера (или вообще не письмо)? – user1070202

1

Поскольку вы только иногда нужны игнорировать суффиксы письма, для наибольшей эффективности, я бы рекомендовал использовать дополнительный HashSet(T) для хранения числовой части. Когда вы добавляете/удаляете элементы из своего словаря, добавьте/удалите числовое значение из HashSet(T). HashSet(T).Contains метод O (1), поэтому проверка того, существует ли элемент, будет быстрым.

Смежные вопросы