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 :
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);