Cómo trabajar con la colección HashTable en Visual C#

Para una versión de Microsoft Visual Basic .NET de este artículo, consulte 307933 .

Resumen

En este artículo paso a paso se muestra cómo utilizar la colección HashTable. Porque el hashing elimina la necesidad de búsquedas costosas para recuperar los datos, puede utilizar hash para recuperarlos de manera eficiente. Hash, utiliza el valor de la propia clave para localizar los datos.

Las bibliotecas de clases de Base ofrecen una clase HashTable que se define en el espacio de nombres System.Collections para que no necesite codificar sus propias tablas hash.

Pasos para generar el ejemplo

Una colección HashTable almacena un par (clave, valor) y utiliza la clave hash y obtener la ubicación de almacenamiento. La clave es inmutable y no puede tener entradas duplicadas en la colección HashTable. Este ejemplo utiliza varias instancias de una clase de persona simple para almacenar en una tabla hash. El apellido se utiliza como la clave.
  1. Abra Microsoft Visual Studio y cree un proyecto de aplicación de Windows Forms en Visual C#. Se agregará Form1 al proyecto de forma predeterminada.
  2. En el Explorador de soluciones, haga clic en el nombre del proyecto, elija Agregary, a continuación, haga clic en clase para agregar un módulo de clase. Class1 se agrega al proyecto de forma predeterminada.
  3. Reemplace el código del módulo Class1 con el código siguiente:
     public class Person{
    public string Fname, Lname;

    public Person(string FirstName, string LastName)
    {
    Fname = FirstName;
    Lname = LastName;
    }

    public override string ToString()
    {
    return Fname + " " + Lname;
    }
    }

    La clase de persona tiene un constructor que toma los parámetros FirstName y LastName y asigna estos parámetros a las variables locales. La función ToString reemplaza ToString de la clase Object para devolver Fname y Lname concatenados.
  4. Cree un objeto Hashtable de nivel de formulario y declare tres variables de tipo Person. Agregue el código siguiente a la clase Form1:
    <?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?>

  5. En los pasos siguientes, utilice el método Add del objeto Hashtable para agregar tres objetos Person para Hashtable en un bloque try-catch . El bloque try-catch detecta la excepción y muestra un mensaje si existen claves duplicadas:
    1. Coloque un control de botón en Form1 y cambie la propiedad Text para Agregar elementos.
    2. Haga doble clic en el botón para abrir su ventana código y pegue el código siguiente en el evento 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);
      }

  6. El objeto Hashtable proporciona un indizador. En los siguientes pasos, INDICE con la clave de acceso al valor almacenado en la ubicación de hash:
    1. Agregue un control Button a Form1 y cambie la propiedad Name para Obtener elementos.
    2. Haga doble clic en el botón y pegue el código siguiente en el evento 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);
      }

  7. En los pasos siguientes, utilice el método Remove para quitar un solo elemento de la colección HashTable:
    1. Agregue un control Button a Form1 y cambie la propiedad Text para Quitar elemento.
    2. Haga doble clic en el botón y pegue el código siguiente en el evento Button3_Click :
      <?xm-deletion_mark author="v-bobbid" time="20080711T173011-0800" data="if (MyTable.Count == 0) {
      MessageBox.Show(&quot;There are no items in HashTable&quot;);
      }
      else
      {
      MessageBox.Show(&quot;The count before removing an Item is&quot; + &quot; &quot; + MyTable.Count);
      MessageBox.Show(&quot;Removing value stored at key value (Burris)&quot;);
      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?>

  8. En los pasos siguientes, enumere los elementos que se almacenan en la colección HashTable:
    1. Agregue un control Button a Form1 y cambie la propiedad Text para Enumerar.
    2. Haga doble clic en el botón y pegue el código siguiente en el evento Button4_Click :
      <?xm-deletion_mark author="v-bobbid" time="20080711T174252-0800" data="IDictionaryEnumerator Enumerator;
      if (MyTable.Count == 0)
      MessageBox.Show(&quot;The hashtable is empty&quot;);
      else
      {
      MessageBox.Show(&quot;Enumerating through the Hashtable collection&quot;);
      Enumerator = MyTable.GetEnumerator();

      while (Enumerator.MoveNext())
      {
      MessageBox.Show(Enumerator.Value.ToString());
      }
      }

      ICollection MyKeys;


      if (MyTable.Count == 0)
      MessageBox.Show(&quot;The hashtable is empty&quot;);
      else
      {
      MessageBox.Show(&quot;Accessing keys property to return keys collection&quot;);
      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 al método GetEnumerator de la colección HashTable. Con el enumerador devuelto, el código enumera los elementos de la colección y utiliza el método claves de HashTable para enumerar las claves.
  9. En los pasos siguientes, utilice el método Clear para borrar la HashTable:
    1. Agregue un control Button a Form1 y cambie la propiedad Text para Borrar.
    2. Haga doble clic en el botón y pegue el código siguiente en el evento Button5_Click :
      MyTable.Clear();      MessageBox.Show("HashTable is now empty");

  10. Siga estos pasos para generar y ejecutar la aplicación:
    1. Haga clic en Agregar elementos. Tenga en cuenta que los tres objetos Person se agregan a la colección HashTable.
    2. Haga clic en obtener elementos. Tenga en cuenta que el indizador obtiene los elementos de la colección HashTable. Se muestran los tres elementos recién agregados.
    3. Haga clic en Quitar elemento. Observe que se elimina el elemento en la ubicación de la clave "Burris".
    4. Haga clic en Enumerar. Tenga en cuenta que IDictionaryEnumerator enumera los elementos de la colección HashTable, y la propiedad Keys de la colección HashTable devuelve una colección de claves.
    5. Haga clic en Borrar. Tenga en cuenta que se borran todos los elementos de la colección HashTable.
Nota: El ejemplo de compañías, organizaciones, productos, nombres de dominio, direcciones de correo electrónico, logotipos, personas, lugares y eventos mencionados son ficticios. Ninguna asociación con ninguna compañía real, organización, producto, nombre de dominio, dirección de correo electrónico, logotipo, persona, lugares o eventos se pretende ni debe deducirse.
Propiedades

Id. de artículo: 309357 - Última revisión: 22 ene. 2017 - Revisión: 1

Comentarios