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 de 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.
Class1se agrega al proyecto de forma predeterminada.Reemplace cualquier código del
Class1mó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
Personclase tiene un constructor que toma losFirstNameparámetros yLastNamey asigna estos parámetros a las variables locales. LaToStringfunción invalidaToStringdesde laObjectclase que se va a devolverFnameyLnameconcatenar.Cree un objeto de nivel
Hashtablede 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
Addmétodo delHashtableobjeto para agregar tresPersonobjetos a enHashtableuntry-catchbloque. Eltry-catchbloque 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_Clickevento: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
Hashtableobjeto proporciona un indexador. En los pasos siguientes, indexe con paraKeyacceder 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_Clickevento://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
Removemétodo para quitar un solo elemento de laHashTablecolecció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_Clickevento:<?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
HashTablecolecció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_Clickevento:<?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
IDictionaryEnumeratory llama alGetEnumeratormétodo de laHashTablecolección. Con elEnumeratordevuelto, el código enumera los elementos de la colección y usa elKeysmétodo deHashTablepara enumerar a través de las claves.
En los pasos siguientes, use el
Clearmétodo para borrar :HashTableAgregue 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_Clickevento:MyTable.Clear(); MessageBox.Show("HashTable is now empty");
Siga estos pasos para compilar y ejecutar la aplicación:
- Seleccione Agregar elementos. Se agregan tres
Personobjetos a laHashTablecolección. - Seleccione Obtener elementos. El indexador obtiene los elementos de la
HashTablecolección. Se muestran los tres elementos recién agregados. - Seleccione Quitar elemento. Se elimina el elemento en la ubicación de la
Burrisclave. - Seleccione Enumerar.
IDictionaryEnumeratorenumera los elementos de laHashTablecolección y laKeyspropiedad deHashTabledevuelve una colección Keys. - Seleccione Borrar. Todos los elementos se borran de la
HashTablecolecció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.