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

Seleccione idioma Seleccione idioma
Id. de artículo: 309357 - Ver los productos a los que se aplica este artículo
Para obtener una versión de Microsoft Visual Basic .NET de este artículo, consulte 307933.
Expandir todo | Contraer todo

En esta página

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 algoritmos hash para recuperar datos de manera eficaz. 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 , por lo 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 para aplicar hash y obtener la ubicación de almacenamiento. La clave es inmutable y no puede tener entradas duplicadas en la tabla hash. 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 Visual Studio de Microsoft y crear 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 de nombre y Apellidos y asigna estos parámetros a las variables locales. La función ToString sustituye a ToString de la clase de objeto 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 la tabla hash 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 en 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 a 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 en 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 en 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 de las claves de la colección HashTable para enumerar las claves.
  9. En los pasos siguientes, utilice el método Clear para borrar la colección HashTable:
    1. Agregue un control Button a Form1 y cambie la propiedad Text en 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. Los tres recién agregan se muestran los elementos.
    3. Haga clic en Quitar elemento. Tenga en cuenta que se elimina el elemento en la ubicación de la clave "Burris".
    4. Haga clic en Enumerar. Tenga en cuenta que enumera los elementos de la colección HashTable IDictionaryEnumerator , y la propiedad de las claves 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 Las compañías, organizaciones, productos, nombres de dominio, direcciones de correo electrónico, logotipos, personas, lugares y eventos mencionados son ficticios. Ninguna asociación con cualquier compañía real, organización, producto, nombre de dominio, dirección de correo electrónico, logotipo, persona, lugares o eventos pretende ni debe deducirse.

Propiedades

Id. de artículo: 309357 - Última revisión: jueves, 31 de octubre de 2013 - Versión: 7.0
La información de este artículo se refiere a:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C++ .NET 2003 Standard
  • Microsoft Visual C# .NET 2002 Standard Edition
Palabras clave: 
kbhowtomaster kbmt KB309357 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 309357

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com