Usar o Visual C# para trabalhar com a coleção HashTable

Este artigo apresenta como usar a HashTable coleção no Visual C#.

Versão original do produto: Visual C#
Número de KB original: 309357

Resumo

Como o hash elimina a necessidade de pesquisa dispendiosa de dados para recuperar os dados, você pode usar o hash para recuperar dados com eficiência. O hashing usa o valor da própria chave para localizar os dados.

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

Etapas para compilar o exemplo

Uma HashTable coleção armazena um par (Key, Value) e usa o Key para hash e obter o local de armazenamento. O Key é imutável e não pode ter entradas duplicadas no HashTable. Este exemplo usa várias instâncias de uma classe simples Person para armazenar em um HashTable. O sobrenome é usado como .Key

  1. Abra o Microsoft Visual Studio e crie um projeto de aplicativo Windows Forms no Visual C#. O Form1 é adicionado ao projeto por padrão.

  2. Em Gerenciador de Soluções, clique com o botão direito do mouse no nome do projeto, aponte para Adicionar e selecione Classe para adicionar um módulo de classe. Class1 é adicionado ao projeto por padrão.

  3. Substitua qualquer código no Class1 módulo pelo seguinte código:

    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;
        }
    }
    

    A Person classe tem um construtor que usa os FirstName parâmetros e LastName e atribui esses parâmetros às variáveis locais. A ToString função substitui ToString da Object classe para retornar Fname e Lname concatenada em conjunto.

  4. Crie um objeto no nível Hashtable do formulário e declare três variáveis do tipo Person. Adicione o seguinte código à classe 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. Nas etapas a seguir, use o Add método do Hashtable objeto para adicionar três Person objetos ao Hashtable em um try-catch bloco. O try-catch bloco captura a exceção e exibe uma mensagem se houver chaves duplicadas:

    1. Coloque um controle Button no Form1 e altere a propriedade Text para Adicionar Itens.

    2. Clique duas vezes no botão para abrir a janela Código e cole o seguinte código no 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. O Hashtable objeto fornece um indexador. Nas etapas a seguir, indexe com o Key para acessar o valor armazenado no local de hash:

    1. Adicione um controle Button ao Form1 e altere a propriedade Name para Obter Itens.

    2. Clique duas vezes no botão e cole o seguinte código no 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. Nas etapas a seguir, use o Remove método para remover um único item da HashTable coleção:

    1. Adicione um controle Button ao Form1 e altere a propriedade Text para Remover Item.

    2. Clique duas vezes no botão e cole o seguinte código no 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. Nas etapas a seguir, enumere os itens armazenados na HashTable coleção:

    1. Adicione um controle Button ao Form1 e altere a propriedade Text para Enumerar.

    2. Clique duas vezes no botão e cole o seguinte código no 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?>
      

      Esse código declara uma variável de tipo IDictionaryEnumerator e chama o GetEnumerator método da HashTable coleção. Com o Enumerator retornado, o código enumera por meio dos itens da coleção e usa o Keys método do HashTable para enumerar por meio das chaves.

  9. Nas etapas a seguir, use o Clear método para limpar o HashTable:

    1. Adicione um controle Button ao Form1 e altere a propriedade Text para Limpar.

    2. Clique duas vezes no botão e cole o seguinte código no Button5_Click evento:

      MyTable.Clear();
      MessageBox.Show("HashTable is now empty");
      
  10. Siga estas etapas para criar e executar o aplicativo:

    1. Selecione Adicionar Itens. Três Person objetos são adicionados à coleção HashTable .
    2. Selecione Obter Itens. O indexador obtém os itens na HashTable coleção. Os três itens recém-adicionados são exibidos.
    3. Selecione Remover Item. O item no local da Burris chave é excluído.
    4. Selecione Enumerar. IDictionaryEnumerator enumera por meio dos itens da HashTable coleção e a Keys propriedade do HashTable retorna uma Coleção keys.
    5. Selecione Limpar. Todos os itens são limpos da HashTable coleção.

Observação

As empresas de exemplo, organizações, produtos, nomes de domínio, endereços de email, logotipos, pessoas, locais e eventos retratados aqui são fictícios. Nenhuma associação com qualquer empresa real, organização, produto, nome de domínio, endereço de email, logotipo, pessoa, locais ou eventos é pretendida ou deve ser inferida.