2010-01-07 6 views
0

J'ai Dictionary<long, Location> PostalCodes.Dictionnaire C# ContainsValue rechercher par attribut d'objet

Pendant que j'ajoute de nouveaux éléments à ce dictionnaire, je veux faire une recherche dans ce dictionnaire et si le Location.PostalCode n'est pas dans ce dictionnaire, je veux l'insérer. Sinon, je veux l'ignorer. Donc, besoin de savoir si le code postal est déjà dans la collection. Je ne peux pas l'utiliser comme clé.

Comment faire?

Merci.

+1

Alors, votre dictionnaire s'appelle 'PostalCodes'? Que représente la clé longue? Quelles sont les données dans l'emplacement? Normalement, si vous voulez ajouter un élément à un dictionnaire s'il n'existe pas déjà à une valeur particulière, vous utilisez cette valeur comme clé: 'PostalCodes [postalCode] = location;' –

Répondre

5

Il semble que vous ayez besoin d'un autre dictionnaire que utilise pour l'utiliser comme clé - essentiellement une carte bidirectionnelle. Au moins, c'est si vous voulez qu'il fonctionne bien. Vous pouvez juste regarder à travers chaque valeur dans la carte, mais ce serait une opération O (n).

(Sinon, si vous faites cette fois, il suffit de créer un HashSet<Location> pour tous les endroits que vous utilisez. Vous ne avez pas réellement besoin du long, par les sons de celui-ci dans le but de l'inverse recherche.)

+0

Long est pour l'ID de l'emplacement externe, c'est un pointeur pour mapper l'adresse IP avec les emplacements. Donc je dois utiliser ça. En outre, je ne peux pas vraiment utiliser le code postal comme valeur clé du Dict. parce que, j'ai vu que les codes postaux ne sont pas uniques pour l'emplacement. au moins c'est ce que montre le fichier des fournisseurs. – DarthVader

+0

Mais vous n'avez * pas * besoin d'utiliser le long pour la recherche inversée - c'est ce que je voulais dire. Éditera. –

4

Vous pouvez essayer:

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

Mais cela pourrait obtenir lent avec une grande quantité de données.

+2

s/might/will :) –

Questions connexes