2010-01-07 5 views
0

У меня есть Dictionary<long, Location> PostalCodes.C# Dictionary ContainsValue поиск по атрибуту объекта

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

Как это сделать?

Спасибо.

+1

Итак, ваш словарь называется 'PostalCodes'? Что представляет собой длинный ключ? Какие данные находятся в этом месте? Обычно, если вы хотите добавить элемент в словарь, если он еще не существует с определенным значением, вы используете это значение в качестве ключа: 'PostalCodes [postalCode] = location;' –

ответ

5

Похоже, что вам нужен еще один словарь, который делает использовать его в качестве ключа - в основном двунаправленную карту. По крайней мере, это так, если вы хотите, чтобы он работал хорошо. You может просто просматривать каждое значение на карте, но это будет операция O (n).

(В качестве альтернативы, если вы делаете это один раз, просто создать HashSet<Location> для всех мест, которые вы используете. Вы на самом деле не нужно long, звуки для него с целью обратного lookup.)

+0

Long для внешнего идентификатора местоположения, это указатель на карту IP с местоположениями. Поэтому я должен использовать это. Кроме того, я не могу использовать Postal Code в качестве ключевого значения Dict. потому что, я видел, что почтовые индексы не уникальны для местоположения. по крайней мере, то, что показывает файл провайдеров. – DarthVader

+0

Но вы * не * должны использовать длинный для обратного просмотра - вот что я имел в виду. Будет редактировать. –

4

Вы можете попробовать:

if(PostalCodes.Values.All(l=>l.PostalCode != location.PostalCode)) 
{ 
    PostalCodes.Add(key /*what is it*/, location); 
} 

Но это может получить медленно с большим количеством данных.

+2

s/might/will :) –

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