117 votes

L’ordre des éléments dans le dictionnaire

Ma question est sur l’énumération des éléments de Dictionary

Dans quel ordre seront les éléments énumérés ? Je peux forcer l’ordre alphabétique ?

135voto

Darin Dimitrov Points 528142

L'ordre des éléments dans un dictionnaire est non-déterministe. La notion d'ordre n'est pas défini pour les tables de hachage. Donc, ne comptez pas sur l'énumération dans le même ordre que les éléments ont été ajoutés au dictionnaire. Ce n'est pas garanti.

Citation de la doc:

Pour les fins du recensement, chaque élément dans le dictionnaire est traité comme un KeyValuePair<TKey, TValue> structure représentant une valeur et sa clé. L'ordre dans lequel les articles sont retournés est pas défini.

32voto

Adrian Carneiro Points 26652

Je pense que je suis en retard pour cette partie, mais vous pouvez toujours utiliser SortedDictionary pour que. Notez que le disctionary est commandé par Clé, par défaut, à moins d'un comparateur a été spécifié.

Je suis sceptique quant à l'utilisation de l' OrderedDictionary de ce que vous voulez depuis la documentation dit que

Les éléments d'un OrderedDictionary ne sont pas triés par la clé, à la différence de les éléments d'une SortedDictionary classe.

30voto

Mitch Wheat Points 169614

Si vous souhaitez que les éléments commandés, utilisez un OrderedDictionary. Un ordinaire hastable/dictionnaire ordonne seulement dans un certain sens de la disposition de stockage.

14voto

Guffa Points 308133

Les articles seront retournés dans l'ordre dans lequel ils se trouvent être stockées physiquement dans le dictionnaire, qui repose sur le code de hachage et l'ordre des éléments ont été ajoutés. Ainsi, l'ordre semble aléatoire, et que les implémentations de changer, vous ne devez jamais dépendre de l'ordre rester le même.

Vous pouvez commander les éléments lors de l'énumération eux:

foreach (KeyValuePair<string, string> kvp in _Dictionary.OrderBy(k => k.Value)) {
  ...
}

Dans le cadre 2.0 il faut d'abord placer les éléments dans une liste afin de les trier:

List<KeyValuePair<string, string>> items = new List<KeyValuePair<string, string>>(_Dictionary);
items.Sort(delegate(KeyValuePair<string, string> x, KeyValuePair<string, string> y) { return x.Value.CompareTo(y.Value); });
foreach (KeyValuePair<string,string> kvp in items) {
  ...
}

5voto

Tim Čas Points 1767

Les tableaux associatifs (aka, les tables de hachage) sont désordonnés, ce qui signifie que les éléments peuvent être commandés en quelque sorte qu’on puisse imaginer.

Toutefois, vous pourriez aller chercher les clés du tableau (uniquement les clés), afin que par ordre alphabétique (via une fonction de tri) et ensuite travailler là-dessus.

Je ne peux vous donner un exemple c# parce que je ne connais pas la langue, mais cela devrait être suffisant pour vous rendre sur vous-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X