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 |