c# Hashtable triés par des Touches de
J'ai une table de hachage avec des touches alphabétiques et les valeurs numériques.
comment faire pour trier la table de hachage basée sur les touches?
ExchangeA, 200
ExchangeV, 100
ExchangeC, 200
comme cela
ExchangeA, 200
ExchangeC, 200
ExchangeV, 100
Une table de hachage est en soi un non-ordonnée structure de données. Qu'essayez-vous de faire? Il serait possible de créer une Liste triée des paires clé/valeur, est-ce faire ce que vous voulez?
Plusieurs réponses suggèrent l'utilisation de linq est
Je dirais que vous souhaitez utiliser un SortedList ou un SortedDictionary
Plusieurs réponses suggèrent l'utilisation de linq est
Enumerable.OrderBy
méthode d'extension. Il convient de préciser que les tables de hachage et des dictionnaires personnalisés d'égalité les comparateurs; si vous êtes en s'appuyant sur cette fonctionnalité, vous pouvez utiliser le OrderBy
surcharge qui accepte une coutume IComparer
exemple, pour fournir une commande qui est compatible avec l'égalité relation que vous avez utilisé pour compiler la table de hachage ou un dictionnaire.Je dirais que vous souhaitez utiliser un SortedList ou un SortedDictionary
OriginalL'auteur John Ryann | 2012-02-14
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un
SortedDictionary
pour ce qui permettra de faire le tri par clé pour vous. Dans votre cas, unSortedDictionary<string, int>
devrait fonctionner:De sortie:
SortedDictionary
est mis en œuvre en interne par un arbre de recherche binaire, et aO(lg n)
de récupération plutôt que de l'attendreO(1)
récupération d'une table de hachage. Selon les OP, les besoins, il peut vouloir ceci ou il peut vouloir faire un Tri comme dans d'autres réponsesOui, c'est un excellent point de le faire - à l'aide d'un
SortedDictionary
n'est utile que si la récupération par clé doit être fait souvent / toujours, et la clé de recherche le temps n'est pas critique (O(lg n)
est encore grande, mais certainement pire queO(1)
)il ya un autre avantage de
SortedDictionary<,>
: Il n'utilise pas de tableaux, alors queDictionary<,>
. Si vous avez un nombre considérable d'objets et vous obtenez des problèmes avec des objets volumineux fragmentation,SortedDictionary<,>
est une solution rapide pour garder vos données du tas d'objets volumineux.OriginalL'auteur BrokenGlass
La façon la plus simple que j'ai trouvée pour "trier" table de hachage est:
Cependant, je ne suis pas la commande de l'original de la table de hachage, la seule lecture de ses valeurs dans un ensemble ordonné.
Comme dans d'autres réponses, si vous avez besoin de stocker vos données sont triées façon, le mieux est d'utiliser SortedDictionary
OriginalL'auteur Rafael Diego Nicoletti
En raison de la nature de tables de hachage, vous ne pouvez pas trier sur la clé en place: ils organisent leurs clés dans des seaux en fonction de leur code de hachage, une valeur en dehors de la table de hachage. Toutefois, vous pouvez lire les paires clé-valeur dans n'importe quel ordre que vous le souhaitez. Voici comment vous pouvez le faire à l'aide de LINQ:
OriginalL'auteur dasblinkenlight
À l'aide de Linq est facile (
using System.Linq
):Qui retourne une liste de
KeyValuePair<string, int>
.OriginalL'auteur Diego
Utiliser une liste au lieu d'une table de hachage (ou de convertir votre de hachage pour un dictionnaire), et de le faire:
OriginalL'auteur Matt Grande
J'ai utilisé une liste pour stocker les clés de la table de hachage et triées puis dislayed table de hachage à l'aide de cette liste triée. Voici mon code:
OriginalL'auteur Badar