Uso de Visual C# para trabajar con la colección HashTable
En este artículo se presenta cómo usar la HashTable
colección en Visual C#.
Versión original del producto: Visual C#
Número de KB original: 309357
Resumen
Dado que el hash elimina la necesidad de realizar búsquedas costosas de datos para recuperar los datos, puede usar el hash para recuperar datos de forma eficaz. El hash usa el valor de la propia clave para localizar los datos.
Las bibliotecas de clases base ofrecen una HashTable
clase que se define en el System.Collections
espacio de nombres para que no sea necesario codificar sus propias tablas hash.
Pasos para compilar el ejemplo
Una HashTable
colección almacena un par (Key
, Value
) y usa para Key
aplicar hash y obtener la ubicación de almacenamiento. Key
es inmutable y no puede tener entradas duplicadas en .HashTable
En este ejemplo se usan varias instancias de una clase simple Person
para almacenar en .HashTable
El apellido se usa como .Key
Abra Microsoft Visual Studio y cree un proyecto de aplicación Windows Forms en Visual C#. Form1 se agrega al proyecto de forma predeterminada.
En Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto, seleccione Agregar y, a continuación, seleccione Clase para agregar un módulo de clase.
Class1
se agrega al proyecto de forma predeterminada.Reemplace cualquier código del
Class1
módulo por el código siguiente: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
clase tiene un constructor que toma losFirstName
parámetros yLastName
y y asigna estos parámetros a las variables locales. LaToString
función invalidaToString
desde laObject
clase que se va a devolverFname
yLname
concatenar.Cree un objeto de nivel
Hashtable
de formulario y declare tres variables de tipoPerson
. Agregue el código siguiente a la claseForm1
:<?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?>
En los pasos siguientes, use el
Add
método delHashtable
objeto para agregar tresPerson
objetos a enHashtable
untry-catch
bloque. Eltry-catch
bloque detecta la excepción y muestra un mensaje si existen claves duplicadas:Coloque un control Button en Form1 y cambie la propiedad Text a Agregar elementos.
Haga doble clic en el botón para abrir su ventana Código y pegue el código siguiente en el
Button1_Click
evento: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); }
El
Hashtable
objeto proporciona un indexador. En los pasos siguientes, indexe con paraKey
acceder al valor almacenado en la ubicación con hash:Agregue un control Button a Form1 y cambie la propiedad Name a Obtener elementos.
Haga doble clic en el botón y pegue el código siguiente en el
Button2_Click
evento://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); }
En los pasos siguientes, use el
Remove
método para quitar un solo elemento de laHashTable
colección:Agregue un control Button a Form1 y cambie la propiedad Text a Remove Item.
Haga doble clic en el botón y pegue el código siguiente en el
Button3_Click
evento:<?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?>
En los pasos siguientes, enumere los elementos almacenados en la
HashTable
colección:Agregue un control Button a Form1 y cambie la propiedad Text a Enumerate.
Haga doble clic en el botón y pegue el código siguiente en el
Button4_Click
evento:<?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?>
Este código declara una variable de tipo
IDictionaryEnumerator
y llama alGetEnumerator
método de laHashTable
colección. Con elEnumerator
devuelto, el código enumera los elementos de la colección y usa elKeys
método deHashTable
para enumerar a través de las claves.
En los pasos siguientes, use el
Clear
método para borrar :HashTable
Agregue un control Button a Form1 y cambie la propiedad Text a Borrar.
Haga doble clic en el botón y pegue el código siguiente en el
Button5_Click
evento:MyTable.Clear(); MessageBox.Show("HashTable is now empty");
Siga estos pasos para compilar y ejecutar la aplicación:
- Seleccione Agregar elementos. Se agregan tres
Person
objetos a laHashTable
colección. - Seleccione Obtener elementos. El indexador obtiene los elementos de la
HashTable
colección. Se muestran los tres elementos recién agregados. - Seleccione Quitar elemento. Se elimina el elemento en la ubicación de la
Burris
clave. - Seleccione Enumerar.
IDictionaryEnumerator
enumera los elementos de laHashTable
colección y laKeys
propiedad deHashTable
devuelve una colección Keys. - Seleccione Borrar. Todos los elementos se borran de la
HashTable
colección.
- Seleccione Agregar elementos. Se agregan tres
Nota:
Las empresas, organizaciones, productos, nombres de dominio, direcciones de correo electrónico, logotipos, personas, lugares y eventos descritos aquí son ficticios. No se pretende o debe deducirse ninguna asociación con ninguna empresa, organización, producto, nombre de dominio, dirección de correo electrónico, logotipo, persona, lugares o eventos reales.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de