Siguiendo con el tema de las colecciones vamos a ver otro tipo de colecciones, las que almacenan pares de valores (una llave y un valor).
Hashtable
El Hashtable es una colección que guarda pares de valores, almacena una llave y un valor. Usualmente es usada cuendo se requiere obtener un valor basado alguna clave que conocemos. Por ejemplo, un nombre de usuario asociado a un nombre completo, o un código asociado a un proveedor, veamos el ejemplo:
Imports System.Collections Module Module1 Sub Main() Dim clientes As New Hashtable clientes.Add("01", "Cliente_01") clientes.Add("02", "Cliente_02") clientes.Add("03", "Cliente_03") clientes.Add("04", "Cliente_04") For Each cliente As DictionaryEntry In clientes Console.WriteLine("Código: {0}, Nombre: {1}", cliente.Key, cliente.Value) Next Console.ReadKey() End Sub End Module |
Es importante que tomemos en cuenta que si tratamos de almacenar dos entradas con la misma llave, la primer entrada será sustituida, podemos decir más técnicamente que si el hash de las dos llaves es igual el valor será sustituido.
SortedList
Es prácticamente igual al hashtable con la diferencia que en esta colección los datos se almacenan de manera ordenada. Veamos:
Imports System.Collections Module Module1 Sub Main() Dim clientes As New SortedList clientes.Add("03", "Cliente_03") clientes.Add("02", "Cliente_02") clientes.Add("04", "Cliente_04") clientes.Add("01", "Cliente_01") For Each cliente As DictionaryEntry In clientes Console.WriteLine("Código: {0}, Nombre: {1}", cliente.Key, cliente.Value) Next Console.ReadKey() End Sub End Module |
ListDiccionary
Es ListDiccionary es prácticamente igual al hashtable, solo que es más eficiente para colecciones pequeñas. Es considerada como una colección especializada, por eso la encontramos en System.Collections.Specialized. Veamos:
Imports System.Collections Imports System.Collections.Specialized Module Module1 Sub Main() Dim clientes As New ListDictionary clientes.Add("03", "Cliente_03") clientes.Add("02", "Cliente_02") clientes.Add("04", "Cliente_04") clientes.Add("01", "Cliente_01") For Each cliente As DictionaryEntry In clientes Console.WriteLine("Código: {0}, Nombre: {1}", cliente.Key, cliente.Value) Next Console.ReadKey() End Sub End Module |
HybridDictionary
Esta es otra colección especializada, vimos anteriormente que tenemos el hashtable, muy eficiente para colecciones grandes, y luego el ListDictionary para colecciones pequeñas, pero que pasa cuando la colección que estamos implementando es algunas veces grande y otras veces pequeña, para estos casos se recomiendo la implementación mediante el HybridDictionary, ya que esta colección tiene la capacidad de comportarse como un ListDictionary pero cuando la colección crece automáticamente se trasforma en un Hashtable, siendo entonces bastante eficiente para ambientes irregulares (donde el tamaño de las colección varía sustancialmente).
Imports System.Collections Imports System.Collections.Specialized Module Module1 Sub Main() Dim clientes As New HybridDictionary clientes.Add("03", "Cliente_03") clientes.Add("02", "Cliente_02") clientes.Add("04", "Cliente_04") clientes.Add("01", "Cliente_01") For Each cliente As DictionaryEntry In clientes Console.WriteLine("Código: {0}, Nombre: {1}", cliente.Key, cliente.Value) Next Console.ReadKey() End Sub End Module |
OrderedDictionary
El OrderedDictionary es otra colección especializada, y nos da prácticamente la misma funcionalidad de un hashtable, pero agrega la funcionalidad necesaria para poder acceder los ítems por medio de un índice. Adicional a los métodos del hashtable el OrderedDictionary tiene un insert y un removeat para poder controlar el orden de los elementos. Pero mejor veamos un ejemplo:
Imports System.Collections Imports System.Collections.Specialized Module Module1 Sub Main() Dim clientes As New OrderedDictionary clientes.Add("03", "Cliente_03") clientes.Insert(0, "02", "Cliente_02") clientes.Add("04", "Cliente_04") clientes.Insert(0, "01", "Cliente_01") For Each cliente As DictionaryEntry In clientes Console.WriteLine("Código: {0}, Nombre: {1}", cliente.Key, cliente.Value) Next Console.ReadKey() End Sub End Module |
1 comentario:
hola, esta muy bueno el material,
en un hastable como podria obtener el key de un valor obtenido con con el metodo hashtable.ContainsValue("client_01")
si la tabla es hashtable.add("01","Cliente_01")
if hashtable.ContainsValue("client_01") then
a ki kisiera obtener el valor 01
clave= ???
endif
Publicar un comentario