Le tri de la table de hachage par l'Ordre dans Lequel Il a Été Créé
Ceci est similaire à Comment garder l'ordre des éléments dans la table de hachage, sauf pour les .NET.
Est-il Hashtable
ou Dictionary
dans .NET qui vous permet d'accéder à ses .Index
propriété pour l'entrée dans l'ordre dans lequel il a été ajouté à la collection?
Vous devez vous connecter pour publier un commentaire.
Un
NameValueCollection
pouvez récupérer les éléments par index (mais on ne peut pas demander à ce que l'indice d'une clé spécifique ou d'un élément). Donc,Cependant, il se comporte bizarrement (par rapport à un IDictionary) lorsque vous ajoutez une touche plusieurs fois:
Le comportement est bien documentée, cependant.
Attention:
NameValueCollection
ne pas mettre en œuvreIDictionary
.En aparté:
Dictionary<K,V>
n'a aucun indice que vous pouvez utiliser, mais tant que vous ne l'ajout d'éléments, et de ne jamais supprimer tout, l'ordre des éléments est de l'ordre d'insertion. Notez que c'est un détail de Microsoft actuelles de mise en œuvre: la documentation stipule explicitement que l'ordre est aléatoire, donc ce comportement peut changer dans les futures versions de l' .NET Framework ou Mono.Si c'est quelque chose que vous avez besoin de garder une trace de manière efficace, alors, vous êtes à l'aide de la mauvaise structure de données. Au lieu de cela, vous devez utiliser un
SortedDictionary
où la clé est taggés avec l'indice de quand il a été ajouté (ou un timestamp) et une coutumeIComparer
qui compare les deux touches de fonction de l'indice (ou l'horodateur).Pas. Vous pouvez enumarate sur tous les éléments dans un Hastable ou un Dictionnaire, mais ce ne sont pas gaurenteed à être dans n'importe quel ordre (plus probable qu'ils ne le sont pas)
Que vous auriez à utiliser une autre structure de données tout à fait, (comme SortedDictionary ou SortedList) ou utiliser une liste séparée pour stocker l'ordre dans lequel ils ont été ajoutés. Vous souhaitez envelopper la liste ordonnée et votre dictionnaire/hashtable dans une autre classe pour les garder synchronisés.
Vous pouvez utiliser une liste séparée pour stocker les éléments dans l'ordre où ils sont ajoutés. Quelque chose le long des lignes de l'exemple suivant:
Prendre un coup d'oeil à la OrderedDictionary classe. Non seulement vous pouvez y accéder via les touches, mais également par l'intermédiaire d'un index (position).
Une alternative est de créer un tableau de stuctures, donc au lieu d'utiliser
vous créer une structure avec la clé/valeur comme:
Utilisant cette méthode, vous pouvez ajouter des dimensions supplémentaires à la liste sans trop d'effort, il suffit d'ajouter un nouveau membre au sein de la structure.
Remarque, si vous avez besoin de modifier des éléments dans la liste une fois qu'ils ont été ajoutés, vous aurez à changer la structure dans une classe. Voir cette page pour plus d'informations sur cette question: erreur de changement de la valeur de la structure dans une liste