Itération sur Dictionnaire avec foreach, dans quel ordre est-ce fait?
Dire que j'ai un Dictionary
, et j'ajoute chaque key
et value
entrée dans un ordre spécifique.
Maintenant, si je veux plus tard pour être en mesure de parcourir cette Dictionary
dans le même ordre d'entrées ont été ajoutées, c'est l'ordre que j'obtiens avec de simples foreach
boucle sur ce dictionnaire?
Si non, je serai heureux d'entendre comment puis-je faire, je sais que cela peut être fait facilement avec List
au lieu de Dictionary
mais je ne veux pas.
Grâce
Aucun Dictionnaire ne permet pas de maintenir l'ordre. Malheureusement, je pense que vous devez utiliser une Liste.
utiliser un
Dictionnaire est un
Vous pourriez trouver, je le sais. Le point est, il n'est pas le même. Aussi: , implémente
parce que je n'ai pas le reste de votre commentaire, avez-vous modifier le commentaire, peut-être? Encore, en disant: "utiliser
utiliser un
IEnumerable<KeyValuePair<K, V> >
à la place (par exemple, une Liste<>)Dictionnaire est un
IEnumerable<KeyValuePair<K, V>>
.Vous pourriez trouver, je le sais. Le point est, il n'est pas le même. Aussi: , implémente
parce que je n'ai pas le reste de votre commentaire, avez-vous modifier le commentaire, peut-être? Encore, en disant: "utiliser
IEnumerable<KeyValuePair<K, V>>
au lieu de Dictionary<K, V>
est un peu comme dire "l'utilisation d'un outil plutôt qu'un marteau".OriginalL'auteur JavaSa | 2012-12-21
Vous devez vous connecter pour publier un commentaire.
Normal
Dictionary
ne garantit pas l'ordre des éléments.Vous avez besoin
OrderedDictionary
si vous voulez maintenir l'ordre des éléments ajoutés. Notez qu'il n'existe pas de version générique de cette classe .Net framework, donc soit avoir à renoncer à certaines de sécurité du type ou trouver d'autres de mise en œuvre (c'est à dire https://www.codeproject.com/Articles/18615/OrderedDictionary-T-A-generic-implementation-of-IO comme suggéré par Tim S).Sinon, si O(log n) recherche est fine et les clés doivent être triés - SortedDictionary.
OrderedDictionary
: codeproject.com/Articles/18615/...OriginalL'auteur Alexei Levenkov
Sonne comme ce que vous voulez, c'est un
Queue<T>
: http://msdn.microsoft.com/en-us/library/7977ey2c.aspxAjouter votre
KeyValuePair<T, U>
des éléments dans l'ordre que vous voulez et puisforeach
ing-dessus, il sera dans premier, premier ordre".OriginalL'auteur mletterle
Dictionary
s sont des tables de hachage, ce qui signifie que vous ne pouvez pas garantir que l'itération la paire sera de retour dans le même ordre que vous l'avez ajouté.Chaque paire est une
KeyValuePair<T_K, T_V>
, alors vous pourriez avoir unList<KeyValuePair<string, string>>
qui permet d'itérer dans l'ordre que vous les ajouter si c'est ce que vous avez besoin.List<KeyValuePair<string, string>>
,suppose que tu ne veux pas faire la liste des dictionnaires n'est-ce pas?Lorsque vous énumérer
Dictionary
vous obtenez une énumération deKeyValuePair<T,K>
s, donc j'étais juste à l'aide d'une liste. Alexei Levenkov la réponse est certainement plus correct siOriginalL'auteur Mike Park
Le tri interne du dictionnaire dépendra de la fonction de hachage utilisée. Toutefois, si vous avez besoin d'un affichage trié les données, vous pouvez utiliser
Enumerable.OrderBy
.OriginalL'auteur Scott Wegner