Tabela hash C# com exemplos

⚡ Resumo Inteligente

Em C#, uma Hashtable é uma coleção do namespace System.Collections que armazena dados como pares chave-valor, onde cada chave exclusiva corresponde a um valor e a chave permite uma busca rápida desse valor armazenado.

  • 📚 Pares chave-valor: Uma tabela hash armazena dois valores por elemento, uma chave e seu valor, em vez do valor único armazenado em uma pilha ou lista de arrays.
  • Adicionando elementos: O método Add insere uma chave e um valor juntos, e cada chave dentro da Hashtable deve ser única.
  • ???? ContainsKey e ContainsValue: Esses métodos retornam verdadeiro ou falso, permitindo que você verifique se uma chave ou um valor já existe.
  • 🔁 Valores de leitura: A propriedade Keys, com um ICollection ou um loop DictionaryEntry, permite ler cada valor armazenado em sequência.
  • 🛠️ Métodos e propriedades: Remover, Limpar, Contar, Chaves e Valores gerenciam e inspecionam o conteúdo da tabela hash.
  • 🤖 Assistência de IA: O GitHub Copilot cria código baseado em Hashtable, enquanto as linguagens modernas C# e ML.NET preferem o uso do dicionário genérico para dados de chave-valor com segurança de tipos.

Tabela hash C#

O que é Hashtable em C#?

Uma tabela hash é uma coleção especial usada para armazenar itens de valor-chave. Portanto, em vez de armazenar apenas um valor como pilha, lista de array e fila, a tabela hash armazena 2 valores. Esses 2 valores formam um elemento da tabela hash.

Abaixo estão alguns exemplos de como podem ser os valores de uma tabela hash.

{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }

Acima temos 3 pares de valores-chave. As chaves de cada elemento são 001, 002 e 003 respectivamente. Os valores de cada par de valores-chave são “. Net“, “C#” e “ASP.Net” respectivamente.

Vejamos as operações disponíveis para a coleção Hashtable com mais detalhes.

Declaração da Hashtable

A declaração de uma Hashtable é mostrada abaixo. Um Hashtable é criado com a ajuda do tipo de dados Hashtable. A palavra-chave “new” é usada para criar um objeto de uma Hashtable. O objeto é então atribuído à variável ht.

Hashtable ht = new Hashtable()

Adicionando elementos ao Hashtable

O método Add é usado para adicionar um elemento ao fila. A sintaxe geral da instrução é fornecida abaixo

HashTable.add("key","value")

1 exemplo:

Lembre-se de que cada elemento da tabela hash é composto por 2 valores, um é a chave e o outro é o valor.

Agora, vamos ver isso funcionando no nível do código. Todo o código mencionado abaixo será gravado em nosso aplicativo de console.

O código será gravado em nosso arquivo Program.cs. No programa abaixo, escreveremos o código para ver como podemos usar os métodos mencionados acima.

Por enquanto, em nosso exemplo, veremos apenas como podemos criar uma hashtable, adicionar elementos à hashtable e exibi-los de acordo.

Tabela hash em C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   Hashtable ht = new Hashtable();
   ht.Add("001",".Net");
   ht.Add("002","C#");
   ht.Add("003","ASP.Net");

   ICollection keys = ht.Keys;

   foreach (String k in keys)
   {
    Console.WriteLine(ht[k]);
   }
    Console.ReadKey();
   }
 }
}

Code Explicação:-

  1. Primeiro, declaramos a variável hashtable usando o tipo de dados Hashtable usando a palavra-chave “Novo”. O nome da variável definida é 'ht'.
  2. Em seguida, adicionamos elementos à tabela hash usando o método Add. Lembre-se de que precisamos adicionar um elemento chave e um elemento de valor ao adicionar algo à tabela hash.
  3. Não existe uma maneira direta de exibir os elementos de uma tabela hash.
    • Para exibir a tabela hash, primeiro precisamos obter a lista de chaves (001, 002 e 003) da tabela hash.
    • Isso é feito através da interface ICollection. Este é um tipo de dados especial que pode ser usado para armazenar as chaves de coleções de hashtable. Em seguida, atribuímos as chaves da coleção hashtable à variável 'keys'.
  4. A seguir, para cada valor-chave, obtemos o valor associado na tabela hash usando a instrução ht[k].

Se o código acima for inserido corretamente e o programa for executado, a seguinte saída será exibida.

Saída:

Tabela hash em C#

Vejamos mais alguns métodos disponíveis para tabelas hash.

ContémChave

Este método é usado para verificar se uma chave está presente na Hashtable. Abaixo está a sintaxe geral desta instrução. A instrução retornará verdadeiro se a chave existir, caso contrário, retornará o valor falso.

Hashtable.Containskey(key)

ContémValor

Este método é usado para verificar se um valor está presente na tabela Hash. Abaixo está a sintaxe geral desta instrução. A instrução retornará verdadeiro se o Valor existir, caso contrário, retornará o valor falso.

Hashtable.ContainsValue(value)

2 exemplo:

Vamos mudar o código em nosso Aplicação da consola para mostrar como podemos usar os métodos “Containskey” e “ContainsValue”.

Tabela hash em C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   Hashtable ht = new Hashtable();
   ht.Add("001",".Net");
   ht.Add("002","C#");
   ht.Add("003","ASP.Net");

   Console.WriteLine(ht.ContainsKey("001"));
   Console.WriteLine(ht.ContainsValue("C#"));
   Console.ReadKey();
   }
 }
}

Code Explicação:-

  1. Primeiro, usamos o método ContainsKey para ver se a chave está presente na tabela hash. Este método retornará verdadeiro se a chave estiver presente na tabela hash. Este método deve retornar verdadeiro, pois a chave existe na tabela hash.
  2. Em seguida, usamos o método ContainsValue para ver se o valor está presente na tabela hash. Este método retornará 'true', pois o valor existe na tabela hash.

Se o código acima for inserido corretamente e o programa for executado, a seguinte saída será exibida.

Saída:

Tabela hash em C#

Na saída, você pode ver claramente que tanto a chave quanto o valor pesquisado estão presentes na tabela hash.

Como percorrer uma tabela hash em C#

Os exemplos acima leem valores através da coleção Keys, mas uma Hashtable pode ser percorrida de uma maneira mais limpa. Um loop foreach sobre um DictionaryEntry retorna a chave e o valor de cada elemento em uma única passagem, que é a maneira mais comum de ler uma Hashtable.

Passo 1) Crie uma tabela hash e adicione três pares de chave-valor a ela.

Passo 2) Percorra a tabela hash com uma variável DictionaryEntry e, em seguida, leia as propriedades Key e Value de cada entrada.

using System;
using System.Collections;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   Hashtable ht = new Hashtable();
   ht.Add("101", "Java");
   ht.Add("102", "Python");
   ht.Add("103", "Kotlin");

   foreach (DictionaryEntry entry in ht)
   {
    Console.WriteLine(entry.Key + " - " + entry.Value);
   }
   Console.ReadKey();
  }
 }
}

Code Explicação:-

  1. Uma tabela hash chamada ht é criada e três pares chave-valor são inseridos com o método Add.
  2. O loop foreach atribui cada elemento a um DictionaryEntry, cujas propriedades Key e Value expõem as duas metades do par.

Quando o programa é executado, ele imprime cada chave ao lado de seu valor, como por exemplo, 101 – JavaComo uma tabela hash não mantém a ordem de inserção, os pares podem aparecer em uma sequência diferente daquela em que foram adicionados. Para ler apenas as chaves, percorra a coleção `Keys`, e para ler apenas os valores, percorra a coleção `Values`.

Métodos e propriedades de tabelas hash em C#

A classe Hashtable expõe um pequeno conjunto de métodos e propriedades que abrangem quase todas as tarefas necessárias, desde adicionar e remover pares até verificar a associação e contar elementos. Os membros mais úteis estão listados abaixo.

Vogal Formato Descrição
Adicionar(chave, valor) Forma Insere um novo par chave-valor; a chave deve ser única.
Remover(chave) Forma Exclui o elemento que corresponde à chave especificada.
Claro() Forma Remove todos os pares chave-valor da tabela hash.
ContémChave(chave) Forma Retorna verdadeiro quando a chave fornecida estiver presente.
ContémValor(valor) Forma Retorna verdadeiro quando o valor fornecido estiver presente.
Contar Propriedade Obtém o número de pares chave-valor armazenados.
As chaves Propriedade Retorna uma coleção de todas as chaves.
Valores Propriedade Retorna uma coleção de todos os valores.

Como cada chave é transformada em hash, o ContainsKey e o indexador localizam um elemento em tempo quase constante, o que torna uma tabela hash tão útil para buscas rápidas.

Diferença entre Hashtable e Dictionary em C#

Tanto uma Hashtable quanto um Dictionary armazenam pares de chave-valor e ambos pertencem à família mais ampla de classes do C#. coleçõesA diferença crucial reside na segurança de tipos, e essa diferença determina qual você deve usar em um novo código.

  • Segurança do tipo: Uma tabela hash armazena cada chave e valor como um objeto, enquanto um dicionário É genérico, portanto o compilador verifica os tipos que você usa.
  • Domínio: Hashtable reside em System.Collections, enquanto Dictionary reside em System.Collections.Generic.
  • Boxing: Uma Hashtable encapsula tipos de valor como int, mas um Dictionary genérico os armazena diretamente e evita esse custo.
  • Desempenho: O dicionário geralmente é mais rápido porque não exige conversão de valor de objeto para dicionário ao ler um valor.
  • Segurança da rosca: O Hashtable oferece o SyncWrapper cronizado para um escritor com muitos leitores, enquanto o código concorrente geralmente escolhe ConcurrentDictionary.

Para qualquer projeto novo, o dicionário genérico é a escolha recomendada, e a tabela hash não genérica aparece principalmente em códigos mais antigos.

Perguntas Frequentes

O método Remove remove o elemento com uma determinada chave e decrementa o contador (Count) em um. Se a chave não existir, nada acontece; portanto, chame ContainsKey primeiro quando precisar ter certeza de que a chave está presente.

Não. Cada chave em uma Hashtable deve ser única. Chamar o método Add com uma chave que já existe gera uma ArgumentException. No entanto, você pode armazenar o mesmo valor com várias chaves diferentes sem nenhum erro.

Uma tabela hash permite que um escritor tenha vários leitores com segurança. Para várias linhas de escrita, utilize uma tabela hash.SyncSe preferir, use o ConcurrentDictionary do System.Collections.Concurrent, que lida com leituras e gravações simultâneas sem bloqueios externos.

A busca de um valor por chave tem um tempo médio quase constante de O(1), porque a chave é transformada em um hash para encontrar seu bucket. Colisões de hash frequentes podem tornar o processo mais lento, mas isso é raro com chaves bem distribuídas.

Um valor pode ser nulo, mas uma chave não. Passar uma chave nula para o método `Add` ou para o indexador gera uma exceção `ArgumentNullException`. Cada chave também deve ser única e não deve ser alterada enquanto estiver armazenada.

Uma Hashtable não mantém ordem, portanto não pode ser ordenada no próprio local. Copie suas chaves para uma lista ou um ArrayList, ordene essa lista e, em seguida, leia os valores pela chave. Uma SortedList mantém suas entradas ordenadas automaticamente.

Sim. O GitHub Copilot gera declarações de Hashtable, chamadas Add e loops DictionaryEntry a partir de um comentário curto ou nome de método. Frequentemente, ele sugere o Dictionary genérico, já que essa é a coleção recomendada para novos códigos C#.

Os dados de treinamento do ML.NET fluem por meio de coleções tipadas e do pipeline IDataView, em vez de uma Hashtable. No entanto, os mapas de chave-valor baseados em hash ainda oferecem suporte a pesquisas de recursos, codificação de vocabulário e armazenamento em cache em torno de um modelo de aprendizado de máquina.

Resuma esta postagem com: