Quelle est la manière la plus simple de parcourir les clés d'un hachage dans l'ordre alphabétique croissant?Comment parcourir les clés d'une table de hachage dans l'ordre alphabétique?
Répondre
Cela dépend assez du type de clé. Mais supposons pour une minute qu'ils sont des ficelles. Vous pouvez utiliser la requête LINQ suivante
Hashtable table = GetHashTable();
var keys = table.Keys.Cast<String>().OrderBy(x => x);
Pour les structures plus complexes, la requête LINQ est légèrement différente. Supposons aussi que vous aviez la définition suivante pour une
cléstruct Name {
public string First;
public string Last;
// Equality code omitted
}
Le code LINQ serait la suivante
Hashtable table = GetHashtable();
var keys = table.Keys.Cast<Name>().OrderBy(x => x.First).ThenBy(x => x.Last);
Cest pas vraiment ce que les tables de hachage sont conçus pour (ils sont faits pour avoir une répartition uniforme des clés). Utilisez un arbre trié?
Je dois travailler avec du code hérité. Pour l'instant, je me sens plutôt réticent à le refactoriser pour utiliser quelque chose comme SortedDictionary, etc. Mais j'ai toujours besoin de parcourir les touches (qui sont des chaînes) dans l'ordre alphabétique. –
Si vous voulez une carte qui conserve ses clés dans l'ordre naturel, je vous suggère de ne pas utiliser Hashtable
pour commencer. Si vous utilisez toujours la version 1.1, utilisez System.Collections.SortedList
. Si vous utilisez une version 2.0 ou supérieure, utilisez SortedList<TKey, TValue>
ou SortedDictionary<TKey, TValue>
. Les deux derniers sont en grande partie les mêmes en termes d'API, mais ont des caractéristiques de performance différentes - voir les docs pour plus d'informations.
J'aime l'idée de SortedDictionary. Existe-t-il un moyen facile de transtyper entre Hashtable et SortedDictionary
Non - ce sont des types distincts. Vous pouvez créer un nouveau SortedDictionary à partir d'une Hashtable, avec un peu de soin. Mais si vous utilisez .NET 2.0 de toute façon, pourquoi utilisez-vous Hashtable en premier lieu? Vous devriez être capable de simplement remplacer Hashtable par SortedDictionary dans la plupart des cas, sauf si vous avez vraiment besoin de la recherche O (1). –
Eh bien, je trouve cet extrait pour être le mieux adapté à ma situation:
Hashtable settings = GetSettings(); ArrayList keys = new ArrayList(); keys.AddRange(settings.Keys); keys.Sort(); foreach (object key in keys) { // Logic here }
Ce sera probablement un peu plus rapide à utiliser SortedList -
SortedList settings = new SortedList(GetSettings());
foreach (object key in settings.Keys)
{
//logic
}
créer & trier les ArrayList est O (n) + O (nlog n) = O (nlog n), alors que le constructeur SortedList (selon les docs) est O (n), donc il sera plus rapide d'utiliser SortedList directement plutôt que d'utiliser un arraylist et triant explicitement
- 1. L'utilisation d'une table de hachage pour stocker uniquement les clés?
- 2. Imprimer les clés et les données d'une table de hachage en C# .NET 1.1
- 3. Comment trouver les clés d'un hachage?
- 4. Comment ajoutez-vous cette table de hachage dans Clojure?
- 5. Comment trouver toutes les clés dans un hachage ont une valeur en Perl
- 6. Choix d'une taille de table appropriée pour un hachage
- 7. Qu'est-ce qu'une structure de données ressemblant à une table de hachage, mais les clés peu utilisées sont supprimées?
- 8. Comment gérer les clés api
- 9. Comment parcourir les ressources de classe Java?
- 10. Dans les tests unitaires comment passer d'entrée pour la table de hachage
- 11. Raison du tri d'une table de hachage
- 12. Afficher les données par ordre alphabétique
- 13. Modifier les valeurs dans un hachage imbriqué
- 14. CFileDialog :: Parcourir les dossiers
- 15. comment accéder à hachage dans le contrôleur
- 16. vb.net parcourir les résultats de la requête
- 17. Ruby: Créer un hachage avec les clés par défaut + les valeurs d'un tableau
- 18. Mise à jour des données mises en cache dans une table de hachage
- 19. Comment obtenir les mots clés dans lucene.net
- 20. Comment parcourir toutes les propriétés d'une classe?
- 21. Supprimer les clés étrangères dans sybase 12,5
- 22. Comment remplacer une clé de hachage Perl?
- 23. Comment parcourir tous les nœuds d'une arborescence YAML dans Ruby?
- 24. C#: Liaison de la table de hachage à la zone de liste déroulante
- 25. Conversion d'un tableau de clés et un tableau de valeurs dans un hachage en Ruby
- 26. WPF, liaison bidirectionnelle à une table de hachage
- 27. Flèches haut/bas dans la barre de navigation de la vue détaillée pour parcourir les objets dans la table parent
- 28. Comment puis-je stocker plusieurs valeurs dans une table de hachage Perl?
- 29. Comment parcourir XPath récursivement?
- 30. parcourir les fichiers d'une machine
"Impossible de résoudre le symbole Cast" :( –
@SeasonedCoder: vous devez inclure System.Linq. Voir http://msdn.microsoft.com/en-us/library/bb341406.aspx –