Maison > développement back-end > C++ > Pourquoi le dictionnaire C# ne garantit-il pas l'ordre des éléments et comment puis-je garantir l'ordre alphabétique ?

Pourquoi le dictionnaire C# ne garantit-il pas l'ordre des éléments et comment puis-je garantir l'ordre alphabétique ?

Mary-Kate Olsen
Libérer: 2025-01-17 19:01:10
original
383 Les gens l'ont consulté

Why Doesn't C# Dictionary Guarantee Element Order, and How Can I Ensure Alphabetical Ordering?

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal