Utiliser Visual C# pour travailler avec la collection HashTable
Cet article explique comment utiliser la HashTable
collection dans Visual C#.
Version d’origine du produit : Visual C#
Numéro de la base de connaissances d’origine : 309357
Résumé
Étant donné que le hachage élimine la nécessité d’effectuer des recherches coûteuses dans les données pour récupérer les données, vous pouvez utiliser le hachage pour récupérer efficacement les données. Le hachage utilise la valeur de la clé elle-même pour localiser les données.
Les bibliothèques de classes de base offrent une HashTable
classe définie dans l’espace System.Collections
de noms afin que vous ne soyez pas obligé de coder vos propres tables de hachage.
Étapes de génération de l’exemple
Une HashTable
collection stocke une paire (Key
, Value
) et utilise pour Key
hacher et obtenir l’emplacement de stockage. est Key
immuable et ne peut pas avoir d’entrées en double dans .HashTable
Cet exemple utilise plusieurs instances d’une classe simple Person
pour stocker dans un HashTable
. Le nom est utilisé comme Key
.
Ouvrez Microsoft Visual Studio et créez un projet d’application Windows Forms en Visual C#. Form1 est ajouté au projet par défaut.
Dans Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet, pointez sur Ajouter, puis sélectionnez Classe pour ajouter un module de classe.
Class1
est ajouté au projet par défaut.Remplacez n’importe quel code du
Class1
module par le code suivant :public class Person { public string Fname, Lname;d public Person (string FirstName, string LastName) { Fname = FirstName; Lname = LastName; } public override string ToString () { return Fname + " " + Lname; } }
La
Person
classe a un constructeur qui accepte lesFirstName
paramètres et etLastName
affecte ces paramètres aux variables locales. LaToString
fonction remplaceToString
à partir de laObject
classe pour retournerFname
etLname
concaténé ensemble.Créez un objet au niveau
Hashtable
du formulaire et déclarez trois variables de typePerson
. Ajoutez ce code à la classeForm1
:<?xm-deletion_mark author="v-bobbid" time="20080711T172143-0800" data="private Hashtable MyTable = new Hashtable(); //For simplicity, create three Person objects to add to the HashTable collection. Person Person1,Person2,Person3; "?> <?xm-insertion_mark_start author="v-bobbid" time="20080711T172143-0800"?> System.Collections.Hashtable MyTable = new System.Collections.Hashtable(); //For simplicity, create three Person objects to add to the HashTable collection. Person Person1,Person2,Person3; <?xm-insertion_mark_end?>
Dans les étapes suivantes, utilisez la
Add
méthode de l’objetHashtable
pour ajouter troisPerson
objets auHashtable
dans untry-catch
bloc. Letry-catch
bloc intercepte l’exception et affiche un message s’il existe des clés en double :Placez un contrôle Button sur Form1 et remplacez la propriété Text par Ajouter des éléments.
Double-cliquez sur le bouton pour ouvrir sa fenêtre Code, puis collez le code suivant dans l’événement
Button1_Click
:Person1 = new Person("David", "Burris"); Person2 = new Person("Johnny", "Carrol"); Person3 = new Person("Ji", "Jihuang"); //The Add method takes Key as the first parameter and Value as the second parameter. try { MyTable.Add(Person1.Lname, Person1); MyTable.Add(Person2.Lname, Person2); MyTable.Add(Person3.Lname, Person3); } catch (ArgumentException ae) { MessageBox.Show("Duplicate Key"); MessageBox.Show(ae.Message); }
L’objet
Hashtable
fournit un indexeur. Dans les étapes suivantes, indexez avec pourKey
accéder à la valeur stockée à l’emplacement haché :Ajoutez un contrôle Button à Form1 et remplacez la propriété Name par Obtenir des éléments.
Double-cliquez sur le bouton et collez le code suivant dans l’événement
Button2_Click
://Use the indexer of the Hashtable class to retrieve your objects. The indexer takes //Key as a parameter and accesses it with the Hashed location. try { MessageBox.Show(MyTable[Person1.Lname].ToString()); MessageBox.Show(MyTable[Person2.Lname].ToString()); MessageBox.Show(MyTable[Person3.Lname].ToString()); } catch (NullReferenceException ex) { MessageBox.Show("Key not in Hashtable"); MessageBox.Show(ex.Message); }
Dans les étapes suivantes, utilisez la
Remove
méthode pour supprimer un seul élément de laHashTable
collection :Ajoutez un contrôle Button à Form1 et remplacez la propriété Text par Supprimer l’élément.
Double-cliquez sur le bouton et collez le code suivant dans l’événement
Button3_Click
:<?xm-deletion_mark author="v-bobbid" time="20080711T173011-0800" data="if (MyTable.Count == 0) { MessageBox.Show("There are no items in HashTable"); } else { MessageBox.Show("The count before removing an Item is" + " " + MyTable.Count); MessageBox.Show("Removing value stored at key value (Burris)"); Remove the object that is stored at the Key value Person1.Lname. MyTable.Remove(Person1.Lname); } "?> <?xm-insertion_mark_start author="v-bobbid" time="20080711T173011-0800"?>if (MyTable.Count == 0) { MessageBox.Show("There are no items in HashTable"); } else { MessageBox.Show("The count before removing an Item is" + " " + MyTable.Count); MessageBox.Show("Removing value stored at key value (Burris)"); // Remove the object that is stored at the Key value Person1.Lname. MyTable.Remove(Person1.Lname); } <?xm-insertion_mark_end?>
Dans les étapes suivantes, énumérez les éléments stockés dans la
HashTable
collection :Ajoutez un contrôle Button à Form1 et remplacez la propriété Text par Enumerate.
Double-cliquez sur le bouton et collez le code suivant dans l’événement
Button4_Click
:<?xm-deletion_mark author="v-bobbid" time="20080711T174252-0800" data="IDictionaryEnumerator Enumerator; if (MyTable.Count == 0) MessageBox.Show("The hashtable is empty"); else { MessageBox.Show("Enumerating through the Hashtable collection"); Enumerator = MyTable.GetEnumerator(); while (Enumerator.MoveNext()) { MessageBox.Show(Enumerator.Value.ToString()); } } ICollection MyKeys; if (MyTable.Count == 0) MessageBox.Show("The hashtable is empty"); else { MessageBox.Show("Accessing keys property to return keys collection"); MyKeys = MyTable.Keys; foreach (object Key in MyKeys) { MessageBox.Show(Key.ToString()); } } "?> <?xm-insertion_mark_start author="v-bobbid" time="20080711T174252-0800"?> System.Collections.IDictionaryEnumerator Enumerator; if (MyTable.Count == 0) MessageBox.Show("The hashtable is empty"); else { MessageBox.Show("Enumerating through the Hashtable collection"); Enumerator = MyTable.GetEnumerator(); while (Enumerator.MoveNext()) { MessageBox.Show(Enumerator.Value.ToString()); } } System.Collections.ICollection MyKeys; if (MyTable.Count == 0) MessageBox.Show("The hashtable is empty"); else { MessageBox.Show("Accessing keys property to return keys collection"); MyKeys = MyTable.Keys; foreach (object Key in MyKeys) { MessageBox.Show(Key.ToString()); } } <?xm-insertion_mark_end?>
Ce code déclare une variable de type
IDictionaryEnumerator
et appelle laGetEnumerator
méthode de laHashTable
collection. Avec leEnumerator
retourné, le code énumère les éléments de la collection et utilise laKeys
méthode de pourHashTable
énumérer les clés.
Dans les étapes suivantes, utilisez la
Clear
méthode pour effacer :HashTable
Ajoutez un contrôle Button à Form1 et remplacez la propriété Text par Effacer.
Double-cliquez sur le bouton et collez le code suivant dans l’événement
Button5_Click
:MyTable.Clear(); MessageBox.Show("HashTable is now empty");
Procédez comme suit pour générer et exécuter l’application :
- Sélectionnez Ajouter des éléments. Trois
Person
objets sont ajoutés à laHashTable
collection. - Sélectionnez Obtenir des éléments. L’indexeur obtient les éléments de la
HashTable
collection. Les trois éléments nouvellement ajoutés s’affichent. - Sélectionnez Supprimer l’élément. L’élément à l’emplacement de la
Burris
clé est supprimé. - Sélectionnez Énumérer.
IDictionaryEnumerator
énumère les éléments de laHashTable
collection, et laKeys
propriété de retourneHashTable
une collection Keys. - Sélectionnez Effacer. Tous les éléments sont effacés de la
HashTable
collection.
- Sélectionnez Ajouter des éléments. Trois
Remarque
Les exemples d’entreprises, d’organisations, de produits, de noms de domaine, d’adresses de messagerie, de logos, de personnes, de lieux et d’événements présentés ici sont fictifs. Aucune association avec une entreprise, un organization, un produit, un nom de domaine, une adresse e-mail, un logo, une personne, des lieux ou des événements réels n’est prévue ou ne doit être déduite.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour