C# Trier un dictionnaire (Dictionary) par valeur
Date: Lundi 02 mai 2011 à 01:58:03
Sujet: Programmation C# .NET


Trier un dictionnaire par valeur peut être utile en C# si on n'a un dictionary de clés et de valeurs. Par exemple : la clé peut être un mot (string) et la valeur un entier (int) représentant la fréquence d'apparition de ce mot dans un texte.
La collection Dictionnary peut facilement être triée par clés mais le tri par valeur est un peu plus compliqué.

Il y a plusieurs solutions qui pourrait venir à l'esprit pour trier un dictionnaire en C#.

Les SortedDictionary sont une collection adaptée sauf que le tri se fait sur les clés (key) et non sur les valeurs. C'est toutesfois un type de collection qui peut s'avérer fort utile mais dans notre cas, nous ne pourrons pas les utiliser.
Il existe également les SortedList mais celle-ci ne sont utile que pour contenir une liste triée d'un type d'objet (exemple : une liste de mots sous forme de string).
Pour trier un dictionnaire en fonction de ses valeurs, nous allons créer une liste de KeyValuePair qui contiendra les 2 éléments du dictionnaire (clé et valeur) triés par valeur.


List<KeyValuePair<string, string>> maListe = new List<KeyValuePair<string, string>>(s)



maListe.Sort((elt1,elt2) =>
   
{
       
return elt1.Value.CompareTo(elt2.Value);
   
}
);


ou plus simplement :

myList.Sort((x,y)=>x.Value.CompareTo(y.Value));



On peut également conserver le dictionnaire initial et utiliser LINQ.

Exemple d'utilisation de LINQ pour trier un dictionnaire par valeur en C# :


System.Collections.Generic.Dictionary<string, int> monDictionnaire = new Dictionary<string, int>();
    myDict
.Add("un", 1);
    myDict
.Add("quatre", 4);
    myDict
.Add("deux", 2);
    myDict
.Add("trois", 3);

   
var DicoTrie = (from entry in monDictionnaire orderby entry.Value ascending select entry);


Bon courage






Cet article provient de Tout sur l'informatique - Programmation C#, Sécurité, Divx, P2P
http://www.zmaster.fr

L'URL de cet article est:
http://www.zmaster.fr/modules.php?name=News&file=article&sid=232