ASP.NET - Usando a classe HashTable


As linguagens mais modernas de programação fornecem o suporte a algum tipo de objeto que pode gerenciar um número variável de elementos. Estes objetos são conhecidos como coleções e podem ter elementos incluídos e excluídos facilmente sem a preocupação com a alocação de memória. No velho ASP o objeto Dictionary era uma objeto do tipo coleção - collection - que referenciava cada elemento usando uma chave textual. Uma coleção que armazena objetos é conhecida como uma tabela hash ou hash table.

A .NET Framework fornece uma poderosa classe HashTable.

Uma HasTable é uma coleção onde os elementos possuem chave/valor , e onde cada elemento é indexado usando uma chave alfanumérica. 

Ao trabalhar com a classe Hastable tenha em mente que a ordenação dos elementos na coleção é independente da ordem na qual ele entrou na tabela . A classe emprega seu próprio algorítimo hash para ordenar de forma eficiente os pares chave/valor da coleção.

Vamos criar um projeto ASP.NET e mostrar como usar uma HashTable. O nosso projeto irá exibir a tabela de classificação do campeonato de futebol (estou usando somente alguns times ). Primeiro teremos uma relação dos times e depois vamos excluir dois times para exibir a classificação final.  O projeto irá usar os seguintes componentes:

Vejamos um código de exemplo de uso da classe HashTable. O arquivo HashTable.aspx

<%@ Page Language="VB" %>
<script runat="server">

Sub Page_Load(sender as Object, e as EventArgs)
' Cria uma HashTable
Dim htTimes As New Hashtable()

' Use o método Add para incluir a relação de times do campeonato e seus pontos(só os bons...)
htTimes.Add("Cruzeiro", 97)
htTimes.Add("Santos", 87)
htTimes.Add("São Paulo",79 )
htTimes.Add("Internacional", 72)
htTimes.Add("São Caetano", 71)
htTimes.Add("Coritiba", 70)
htTimes.Add("Atlético Mineiro", 70)
htTimes.Add("Corinthians", 59)
htTimes.Add("Flamengo", 45)

' Exibe uma lista de times
lbltimes.Text = "<i>Os times que não foram rebaixados são => " & htTimes.Count & ".</i><br>"

Dim s as String
For Each s in htTimes.Keys
   lbltimes.Text &= s & " - " & htTimes(s) & "<br>"
Next

' Se Corinthians e  flamengo forem times da lista , vamos remover.(nada contra...)
If htTimes.ContainsKey("Corinthians") Then
  htTimes.Remove("Corinthians")
End If

If htTimes.ContainsValue(45) Then
  htTimes.Remove("Flamengo")
End If

' Lista os times que sobraram
dgtimes.DataSource = htTimes.Keys
dgtimes.DataBind()


htTimes.Clear() ' remove todas as entradas da tabela hash
End Sub

</script>
<html>
<head>
</head>
<body bgcolor="aqua">
<b><font size="4">Classificação do Campeonato : </font></b>
<br />
<asp:Label id="lbltimes" runat="server" font-bold="True" forecolor="#C00000"></asp:Label>
<p>
<b><font size="4">Times classificados para a Libertadores após a penúltima rodada
: </font></b>
<br />
<asp:datagrid id="dgtimes" runat="server" CellPadding="4" CellSpacing="1" ShowHeader="False" AutoGenerateColumns="True" BackColor="#FFFFC0" BorderColor="#FFFF80" ForeColor="Blue">
<ItemStyle backcolor="#C0C0FF"></ItemStyle>
</asp:datagrid>
</p>
</body>
</html>
 

Como eu vou estar usando o WebMatrix neste projeto , você pode copiar o código acima na guia - All - e para executar o projeto clique em Start  ou pressione F5 . Isto fará surgir na tela - Start Web Application

Ao executar o arquivo HashTable.aspx iremos obter o seguinte:

Como você pode ver a exibição da tabela não foi feita na ordem na qual informamos os dados. (Se você quiser uma lista ordenada use um ArrayList ou SortedList). Vejamos os métodos da classe Hashtable usados no código:

Add - para incluir um elemento . Necessita de dois parâmetros : o primeiro uma chave alfanumérica que irá referenciar o elemento e o segundo o elemento. Ex: htTimes.Add("Cruzeiro", 97)

Remove - Para remover um elemento. Precisa somente de um parâmetro : a chave alfanumérica que identifica o elemento

Clear - Para remover todos os elementos da Tabela Hash.

Containskey - Verifica se  um elemento existe. Recebe um parâmetro : a chave do elemento. Se o elemento existir o retorno é True caso contrário False.

ContainsValue - Verifica se um elemento existe. Recebe um parâmetro do tipo objeto e verifica na tabela se existe um elemento que contém o valor informado.

A classe HashTable expõe duas coleções como propriedades : Keys and Values.

Na linha de código dgtimes.DataSource = htTimes.Keys a propriedade DataSource do datagrid é definida como sendo a coleção Keys da HashTable . Como a propriedade Keys retorna uma interface ICollection ela pode ser vinculada ao datagrid.

E é isto ai...

Até o próximo artigo ASP.NET...


José Carlos Macoratti