Question

J'ai une propriété qui retourne un HashTable. Je voudrais trier sans refactorisation ma propriété. S'il vous plaît noter : Je ne veux pas retourner un autre type. Code:

    /// <summary>
    /// All content containers.
    /// </summary>
    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;
        }
    }
Était-ce utile?

La solution

Une autre option consiste à construire la table de hachage que vous faites déjà, puis construire simplement un ensemble triées de clés. Vous pouvez parcourir cet ensemble clé triée, la récupération de la valeur correspondante de la table de hachage selon les besoins.

Autres conseils

travail Hashtables par des touches de mappage des valeurs. Implicite dans cette cartographie est le concept que les clés ne sont pas triés ou stockés dans un ordre particulier.

Cependant, vous pouvez jeter un oeil à SortedDictionary<K,V>.

Lubos est droite: vous ne peuvent pas une sorte de table de hachage. Si vous pouviez, ce ne serait pas un Hashtable. Vous pouvez énumérer Hashtable, puis trier l'énumération. Mais ce serait très lent. Beaucoup mieux d'utiliser un SortedDictionary à la place.

Désolé, mais vous ne pouvez pas trier Hashtable. Vous devrez refactoriser votre code pour utiliser certaines collections triables.

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

Wikipedia Hash Table

Vous devrez retourner autre chose qu'une table de hachage. Je ne répéterai pas ce que vous prétendez comprendre déjà, mais vous devez repenser quelle partie de votre conception vous oblige à retourner des objets triés dans une table de hachage.

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

En Perl, il est commun à « trier » une table de hachage pour une utilisation en sortie à l'écran.

Par exemple:

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

L'astuce ici est que Perl ne règle pas le hachage, il trie une liste copiée de clés de hachage. Il devrait être assez facile en C # pour extraire les clés de hachage dans une liste et puis trier cette liste.

Il n'y a pas de point dans le tri d'une table de hachage car vous avez déjà le temps de recherche presque constante. Ou au pire O (B) où B est la taille du godet.

tables de hachage de cours peuvent être triés, mais vous devez d'abord définir ce que cela signifie pour trier une table de hachage. (La question est là)

Une fois que vous avez fait cela, cependant, vous avez toujours supprimé tous les avantages qu'un Hashtable peut vous donner, et vous pourriez aussi bien utiliser un tableau trié (avec la recherche binaire), ou utiliser un arbre rouge-noir à la place.

Je suis un nouveau programmeur afin de prendre tout ce que je dis avec un grain de sel. Mais voici ce que je faisais quand je courais dans une situation similaire. J'ai créé une classe qui a deux variables, puis créé un objet de ces variables List puis je LINQ pour trier ces variables.

Vous pouvez également utiliser DataView pour trier les Hashtable. Voici un article que je l'ai écrit il y a 5 ans: http://www.codeproject.com/ articles / 37039 / tri-Hashtable

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top