Est-il possible de sortinger un HashTable?

J’ai une propriété qui retourne un HashTable . Je voudrais sortinger sans refactoriser ma propriété. Remarque : je ne souhaite pas renvoyer un autre type. Code:

  ///  /// All content containers. ///  public Hashtable Containers { get { Hashtable tbl = new Hashtable(); foreach (Control ctrl in Form.Controls) { if (ctrl is PlaceHolder) { tbl.Add(ctrl.ID, ctrl); } // Also check for user controls with content placeholders. else if (ctrl is UserControl) { foreach (Control ctrl2 in ctrl.Controls) { if (ctrl2 is PlaceHolder) { tbl.Add(ctrl2.ID, ctrl2); } } } } return tbl; } } 

Une autre option consiste à construire la table de hachage comme vous le faites déjà, puis à créer simplement un jeu sortingé à partir des clés. Vous pouvez parcourir ce jeu de clés sortingé en récupérant la valeur correspondante dans la table de hachage, si nécessaire.

Les tables de hachage fonctionnent en mappant les clés aux valeurs. Ce mappage implique implicitement le principe selon lequel les clés ne sont ni sortingées ni stockées dans un ordre particulier.

Cependant, vous pouvez jeter un oeil à SortedDictionary .

lubos a raison: vous ne pouvez pas sortinger une table de hachage. Si vous le pouviez, ce ne serait pas une table de hachage. Vous pouvez énumérer le HashTable, puis sortinger l’énumération. Mais ce serait très lent. Il vaut bien mieux utiliser un SortedDictionary place.

Désolé, mais vous ne pouvez pas sortinger hashtable. Vous devrez refactoriser votre code pour utiliser des collections sortingables.

Je suis tout à fait sûr que les tables de hachage ne peuvent pas être sortingées …;)

Table de hachage Wikipedia

Vous devrez retourner autre chose qu’une table de hachage. Je ne répéterai pas ce que vous prétendez comprendre, mais vous devez repenser toute partie de votre conception qui vous oblige à renvoyer des objects sortingés dans une table de hachage.

Pas exactement une réponse C # mais je suis sûr que vous pouvez en faire quelque chose.

En Perl, il est courant de “sortinger” une table de hachage à utiliser en sortie d’affichage.

Par exemple:

 print "Items: "; foreach (sort keys %items) { print $_, '=', $items{$_}, ' '; } 

Le truc ici est que Perl ne sortinge pas le hachage, il sortinge une liste copiée de clés de hachage. Il devrait être assez facile en C # d’extraire les clés de hachage dans une liste, puis de sortinger cette liste.

Il ne sert à rien de sortinger une table de hachage car vous avez déjà un temps de recherche presque constant. Ou au pire O (B) où B est la taille du seau.

Bien sûr, les tables de hachage peuvent être sortingées, mais vous devez d’abord définir ce que signifie sortinger une table de hachage. (C’est là que réside le problème)

Une fois que vous avez fait cela, cependant, vous avez invariablement supprimé tous les avantages qu’une table de hachage peut vous offrir. Vous pouvez également utiliser un tableau sortingé (avec recherche binary) ou utiliser plutôt un arbre rouge-noir.

Je suis un nouveau programmeur, alors prenez tout ce que je dis avec un grain de sel. Mais voici ce que j’ai fait quand je me suis retrouvé dans une situation similaire. J’ai créé une classe qui avait deux variables, puis un object List partir de ces variables, puis j’ai utilisé linq pour sortinger ces variables.

Vous pouvez également utiliser DataView pour sortinger la table de hachage. Voici un article que j’ai écrit il y a 5 ans: http://www.codeproject.com/Articles/37039/Sorting-Hashtable