Comprendre l'ordre des dictionnaires C# (ou son absence)
De nombreux développeurs C# supposent à tort que les éléments Dictionary
sont renvoyés dans l'ordre d'insertion. C'est incorrect. L'exemple suivant illustre cela :
<code class="language-csharp">// Dictionary declaration private Dictionary<string, string> _Dictionary = new Dictionary<string, string>(); // Add elements _Dictionary.Add("orange", "1"); _Dictionary.Add("apple", "4"); _Dictionary.Add("cucumber", "6"); _Dictionary["banana"] = "7"; _Dictionary["pineapple"] = "7"; // Iterate and observe the order (non-deterministic) foreach (KeyValuePair<string, string> kvp in _Dictionary) { Trace.Write(String.Format("{0}={1}", kvp.Key, kvp.Value)); }</code>
Le résultat est imprévisible car Dictionary
utilise une table de hachage, qui donne la priorité aux recherches de clés efficaces plutôt qu'au maintien de l'ordre d'insertion. L'ordre d'itération n'est pas garanti et variera.
Application de l'ordre alphabétique avec SortedDictionary
Si vous avez besoin d'éléments triés par ordre alphabétique, utilisez SortedDictionary
à la place. Cette classe maintient l'ordre de tri en fonction du comparateur de clé (la valeur par défaut est alphabétique pour les chaînes).
<code class="language-csharp">// SortedDictionary declaration private SortedDictionary<string, string> _SortedDictionary = new SortedDictionary<string, string>(); // Add elements _SortedDictionary.Add("orange", "1"); _SortedDictionary.Add("apple", "4"); _SortedDictionary.Add("cucumber", "6"); _SortedDictionary.Add("banana", "7"); _SortedDictionary.Add("pineapple", "7"); // Iterate and observe the alphabetical order foreach (KeyValuePair<string, string> kvp in _SortedDictionary) { Trace.Write(String.Format("{0}={1}", kvp.Key, kvp.Value)); }</code>
Cela produira systématiquement une sortie triée par ordre alphabétique. Gardez à l'esprit que SortedDictionary
a une surcharge de performances par rapport à Dictionary
, utilisez-le donc uniquement lorsque l'ordre est essentiel.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!