C#: Supprimer les valeurs en double à partir du dictionnaire?
Comment puis-je créer un dictionnaire sans dupliquer les valeurs d'un dictionnaire qui peuvent avoir des valeurs en double?
IDictionary<string, string> myDict = new Dictionary<string, string>();
myDict.Add("1", "blue");
myDict.Add("2", "blue");
myDict.Add("3", "red");
myDict.Add("4", "green");
uniqueValueDict = myDict.???
Edit:
-Je n'ai pas de soins qui touche est maintenue.
- Est-il quelque chose à l'aide Distinctes() opération?
- La clé voulez-vous garder?
"1"
,"2"
, ou pas du tout? - Je pense que vous avez besoin de donner plus d'informations sur le comportement de l'unique prise de fonction. Pour le bleu, sur quelle touche faut-il garder, 1 ou 2?
- http://www.codeproject.com/KB/linq/Unique.aspx
Vous devez vous connecter pour publier un commentaire.
Que voulez-vous faire avec les doublons? Si vous n'avez pas l'esprit qui vous perdre, tout simplement construire un autre dictionnaire comme ceci:
Qui suppose que vous utilisez .NET 3.5, certes. Laissez-moi savoir si vous avez besoin d'un .NET 2.0 solution.
Voici une LINQ solution je trouve agréablement compact...
ObservableCollection<T>
ou un nongeneric collection?La force brute solution serait quelque chose comme ce qui suit
en supposant que vous n'avez pas vraiment à la clé utilisée pour représenter un groupe de doublons et il est acceptable pour reconstruire le dictionnaire.
Jon me battre pour le .NET 3.5 solution, mais cela devrait fonctionner si vous avez besoin d'un .NET 2.0 solution:
C'est la façon dont je l'ai fait:
En plus de la réponse de Jon Skeet , si votre valeur est un stagiaire objet que vous pouvez utiliser :
Cela vous permettra de supprimer les doublons uniquement sur l'une des propriétés de l'objet
Juste une note pour ceux qui utilisent le Revit API, c'est une méthode qui fonctionne pour moi en enlevant les éléments en double, lorsque vous ne pouvez pas utiliser le dire wallType que votre type d'objet et la place nécessaire de tirer parti des éléments bruts. c'est une beaut mate.