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

  1. Abra Microsoft Visual Studio y cree un proyecto de aplicación Windows Forms en Visual C#. Form1 se agrega al proyecto de forma predeterminada.

  2. 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.

  3. 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 los FirstName parámetros y LastName y y asigna estos parámetros a las variables locales. La ToString función invalida ToString desde la Object clase que se va a devolver Fname y Lname concatenar.

  4. Cree un objeto de nivel Hashtable 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, use el Add método del Hashtable objeto para agregar tres Person objetos a en Hashtable un try-catch bloque. El try-catch bloque detecta la excepción y muestra un mensaje si existen claves duplicadas:

    1. Coloque un control Button en Form1 y cambie la propiedad Text a Agregar elementos.

    2. 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);
      }
      
  6. El Hashtable objeto proporciona un indexador. En los pasos siguientes, indexe con para Key acceder al valor almacenado en la ubicación con hash:

    1. Agregue un control Button a Form1 y cambie la propiedad Name a Obtener elementos.

    2. 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);
      }
      
  7. En los pasos siguientes, use el Remove método para quitar un solo elemento de la HashTable colección:

    1. Agregue un control Button a Form1 y cambie la propiedad Text a Remove Item.

    2. 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(&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 almacenados en la HashTable colección:

    1. Agregue un control Button a Form1 y cambie la propiedad Text a Enumerate.

    2. 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(&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 GetEnumerator método de la HashTable colección. Con el Enumerator devuelto, el código enumera los elementos de la colección y usa el Keys método de HashTable para enumerar a través de las claves.

  9. En los pasos siguientes, use el Clear método para borrar :HashTable

    1. Agregue un control Button a Form1 y cambie la propiedad Text a Borrar.

    2. 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");
      
  10. Siga estos pasos para compilar y ejecutar la aplicación:

    1. Seleccione Agregar elementos. Se agregan tres Person objetos a la HashTable colección.
    2. Seleccione Obtener elementos. El indexador obtiene los elementos de la HashTable colección. Se muestran los tres elementos recién agregados.
    3. Seleccione Quitar elemento. Se elimina el elemento en la ubicación de la Burris clave.
    4. Seleccione Enumerar. IDictionaryEnumerator enumera los elementos de la HashTable colección y la Keys propiedad de HashTable devuelve una colección Keys.
    5. Seleccione Borrar. Todos los elementos se borran de la HashTable colección.

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.