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
Abra o Microsoft Visual Studio e crie um projeto de aplicativo Windows Forms no Visual C#. O Form1 é adicionado ao projeto por padrão.
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.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 osFirstName
parâmetros eLastName
e atribui esses parâmetros às variáveis locais. AToString
função substituiToString
daObject
classe para retornarFname
eLname
concatenada em conjunto.Crie um objeto no nível
Hashtable
do formulário e declare três variáveis do tipoPerson
. Adicione o seguinte código à classeForm1
:<?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?>
Nas etapas a seguir, use o
Add
método doHashtable
objeto para adicionar trêsPerson
objetos aoHashtable
em umtry-catch
bloco. Otry-catch
bloco captura a exceção e exibe uma mensagem se houver chaves duplicadas:Coloque um controle Button no Form1 e altere a propriedade Text para Adicionar Itens.
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); }
O
Hashtable
objeto fornece um indexador. Nas etapas a seguir, indexe com oKey
para acessar o valor armazenado no local de hash:Adicione um controle Button ao Form1 e altere a propriedade Name para Obter Itens.
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); }
Nas etapas a seguir, use o
Remove
método para remover um único item daHashTable
coleção:Adicione um controle Button ao Form1 e altere a propriedade Text para Remover Item.
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("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_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?>
Nas etapas a seguir, enumere os itens armazenados na
HashTable
coleção:Adicione um controle Button ao Form1 e altere a propriedade Text para Enumerar.
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("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()); } } "?> <?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 oGetEnumerator
método daHashTable
coleção. Com oEnumerator
retornado, o código enumera por meio dos itens da coleção e usa oKeys
método doHashTable
para enumerar por meio das chaves.
Nas etapas a seguir, use o
Clear
método para limpar oHashTable
:Adicione um controle Button ao Form1 e altere a propriedade Text para Limpar.
Clique duas vezes no botão e cole o seguinte código no
Button5_Click
evento:MyTable.Clear(); MessageBox.Show("HashTable is now empty");
Siga estas etapas para criar e executar o aplicativo:
- Selecione Adicionar Itens. Três
Person
objetos são adicionados à coleçãoHashTable
. - Selecione Obter Itens. O indexador obtém os itens na
HashTable
coleção. Os três itens recém-adicionados são exibidos. - Selecione Remover Item. O item no local da
Burris
chave é excluído. - Selecione Enumerar.
IDictionaryEnumerator
enumera por meio dos itens daHashTable
coleção e aKeys
propriedade doHashTable
retorna uma Coleção keys. - Selecione Limpar. Todos os itens são limpos da
HashTable
coleção.
- Selecione Adicionar Itens. Três
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.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de