Como trabalhar com a coleção do HashTable no Visual C#

Traduções deste artigo Traduções deste artigo
ID do artigo: 309357 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo detalhado exibe como usar a coleção do HashTable. Como o Hash elimina a necessidade de pesquisa de dados de alto custo para recuperar os dados, é possível usar o Hash para recuperar dados de forma eficiente. O Hash usa o valor da própria chave para localizar os dados.

As Bibliotecas de Classe Base oferecem uma classe HashTable definida no namespace System.Collections para que você não seja solicitado a codificar suas próprias tabelas de hash.

Etapas para criar o exemplo

Uma coleção do HashTable armazena um par (Chave, Valor) e usa a Chave para causar um hash e obter o local de armazenamento. A Chave é imutável e não pode ter entradas duplicadas no HashTable. Esse exemplo usa várias instâncias de uma simples classe de Person para armazenar em um HashTable. O último nome é usado como a Chave.
  1. Abra o Microsoft Visual Studio e crie um projeto do Windows Application no Visual C#. Por padrão, Form1 é adicionado ao projeto.

    Observação O código deve ser alterado no Visual Studio 2005. Para obter mais informações, visite o seguinte site da MSDN (em inglês):
    http://msdn2.microsoft.com/en-us/library/ms173077.aspx
    Ao criar um projeto do Windows Forms, o Visual C# acrescenta um formulário ao projeto, por padrão. Esse formulário é chamado de Form1. Os dois arquivos que representam o formulário são chamados de Form1.cs e Form1.designer.cs. Você grava seu código no Form1.cs. O arquivo designer.cs é o local onde o Windows Forms Designer grava o código que implementa todas as ações executadas ao arrastar e soltar controles na Caixa de Ferramentas.
  2. No Solution Explorer, clique com o botão direito do mouse no nome do projeto, aponte para Add e clique em Add Class para adicionar um módulo Class. Por padrão, Class1 é adicionado ao projeto.
  3. Substitua qualquer código no módulo Class1 pelo seguinte código:
     public class Person
    {
    	public string Fname, Lname;
    
    	public Person(string FirstName, string LastName)
    	{
    		Fname = FirstName;
    		Lname = LastName;
    	}
    
    	public override string ToString()
    	{
    		return Fname + " " + Lname;
    	}
    }
    						
    A classe Person tem um construtor com os parâmetros FirstName e LastName e atribui esses parâmetros às variáveis locais. A função ToString substitui ToString na classe Object para retornar Fname e Lname concatenados em conjunto.
  4. Crie um objeto do Hashtable no nível do formulário e declare três variáveis do tipo Person. Adicione o seguinte código à classe Form1:
    private Hashtable MyTable = new Hashtable();
    		
    //For simplicity, create three Person objects to add to the HashTable collection.
    
    Person Person1,Person2,Person3; 
    					
  5. Nas etapas a seguir, use o método Add do objeto do Hashtable para adicionar três objetos de Person ao Hashtable em um bloco try-catch. O bloco try-catch capturará a exceção e exibirá uma mensagem se houver chaves duplicadas.
    1. Coloque um controle Button no Form1 e altere a propriedade Text para Add Items.
    2. Clique duas vezes no botão para abrir sua janela Código e cole o seguinte código no 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. O objeto do Hashtable fornece um indexador. Nas etapas a seguir, anexe a Chave para acessar o valor armazenado no local de hash.
    1. Adicione um controle Button ao Form1 e altere a propriedade Name para Get Items.
    2. Clique duas vezes no botão e cole o seguinte código no 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. Nas etapas a seguir, use o método Remove para remover um único item da coleção do HashTable:
    1. Adicione um controle Button ao Form1 e altere a propriedade Text para Remove Item.
    2. Clique duas vezes no botão e cole o seguinte código no evento Button3_Click:
      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);
      }
      						
  8. Nas etapas a seguir, enumere os itens armazenados na coleção do HashTable.
    1. Adicione um controle Button ao Form1 e altere a propriedade Text para Enumerate.
    2. Clique duas vezes no botão e cole o seguinte código no evento Button4_Click:
      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());
             }								   
      } 
      							
      Esse código declara uma variável do tipo IDictionaryEnumerator e chama o método GetEnumerator da coleção do HashTable. Com o Enumerator retornado, o código enumera os itens na coleção e use o método Keys do HashTable para enumerar as chaves.
  9. Nas etapas a seguir, use o método Clear para limpar o HashTable.
    1. Adicione um controle Button ao Form1 e altere a propriedade Text para Clear.
    2. Clique duas vezes no botão e cole o seguinte código no evento Button5_Click:
      MyTable.Clear();
            MessageBox.Show("HashTable is now empty");
      						
  10. Siga as seguintes etapas para criar e executar o aplicativo:
    1. Clique em Add Items. Observe que três objetos de Person são adicionados à coleção do HashTable.
    2. Clique em Get Items. Observe que o indexador obtém os itens na coleção do HashTable. Os três itens adicionados recentemente são exibidos.
    3. Clique em Remove Item. Observe que o item no local da chave "Burris" é excluído.
    4. Clique em Enumerate. Observe que IDictionaryEnumerator enumera os itens na coleção do HashTable e a propriedade Keys do HashTable retorna uma Coleção de Chaves.
    5. Clique em Clear. Observe que todos os itens são excluídos da coleção do HashTable.
OBSERVAÇÃO: As empresas, as organizações, os produtos, os nomes de domínio, os endereços de email, os logotipos, as pessoas, os lugares e os eventos descritos neste artigo são fictícios. Nenhuma associação à qualquer empresa, organização, produto, nome de domínio, endereço de email, logotipo, pessoa, lugares ou eventos é intencional ou deve ser inferida.

Propriedades

ID do artigo: 309357 - Última revisão: sexta-feira, 16 de maio de 2008 - Revisão: 3.0
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Palavras-chave: 
kbhowtomaster KB309357

Submeter comentários

 

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