Operaciones varias con colecciones Hashtable
Operaciones varias con colecciones Hashtable
Antes de obtener valores de un objeto Hashtable, podemos comprobar que la clave o valor que necesitamos están realmente en la colección, empleando respectivamente los métodos ContainsKey( ) y ContainsValue( ). Al primero le pasamos como parámetro la clave a buscar, mientras que al segundo le pasamos el valor. Ambos métodos devuelven un resultado de tipo Boolean, que indica si la comprobación tuvo o no éxito.
Por otra parte, el método Remove( ), elimina un elemento del objeto, pasándole como parámetro la clave a borrar, mientras que el método Clear( ), elimina el contenido completo de la colección. El Código fuente 377 muestra un ejemplo.
Sub Main() ' crear colección Hashtable y añadir valores Dim htCliente As New Hashtable() htCliente.Add("ID", 22) htCliente.Add("Nombre", "Pedro") htCliente.Add("Apellidos", "Naranjo") htCliente.Add("Domicilio", "C/Rio Bravo, 25") htCliente.Add("Edad", 35) htCliente.Add("Credito", 250)
' comprobar la existencia de elementos por la clave
Programación con Visual Basic .NET © Grupo EIDOS
Dim sClave As String Console.WriteLine("Introducir la clave a buscar") sClave = Console.ReadLine() If htCliente.ContainsKey(sClave) Then
Console.WriteLine("La clave {0} existe, su valor es: {1}", _ sClave, htCliente(sClave)) Else Console.WriteLine("La clave {0} no existe", sClave) End If Console.WriteLine()
' comprobar la existencia de elementos por el valor Dim oValor As Object Console.WriteLine("Introducir el valor a buscar") oValor = Console.ReadLine() ' antes de comprobar si existe el valor ' debemos hacer una conversión al tipo ' específico de dato del contenido de ' la variable oValor If IsNumeric(oValor) Then
oValor = CType(oValor, Integer) Else oValor = CType(oValor, String) End If ' ahora comprobamos If htCliente.ContainsValue(oValor) Then
Console.WriteLine("El valor {0} existe", oValor) Else Console.WriteLine("El valor {0} no existe", oValor) End If
' para borrar un elemento se usa la clave htCliente.Remove("Nombre") Console.WriteLine() RecorrerHT(htCliente)
' ahora borramos el contenido al completo del objeto htCliente.Clear()
Console.ReadLine() End Sub
Public Sub RecorrerHT(ByVal htTabla As Hashtable) Dim oEnumerador As IDictionaryEnumerator oEnumerador = htTabla.GetEnumerator() While oEnumerador.MoveNext()
Console.WriteLine("Clave: {0} / Valor: {1}", _ oEnumerador.Key, oEnumerador.Value) End While End Sub
Código fuente 377
Las propiedades Keys y Values de la clase Hashtable, devuelven un array con los nombres de las claves y los valores de un objeto Hashtable respectivamente.
Realmente devuelven un objeto del interfaz ICollection, pero ya que un array implementa este interfaz, dicho objeto podemos manipularlo como un array.
Seguidamente mostramos un ejemplo del uso de estas propiedades en el Código fuente 378. Observe el lector el diferente modo de declarar y obtener los objetos ICollection e IEnumerator, que en definitiva, nos llevan al mismo resultado, demostrando así, la gran flexibilidad sintáctica que la especificación CLS proporciona al lenguaje.
© Grupo EIDOS 24. Colecciones
Sub Main() ' crear y llenar la colección Dim htCliente As New Hashtable() htCliente.Add("ID", 22) htCliente.Add("Nombre", "Pedro") htCliente.Add("Apellidos", "Naranjo") htCliente.Add("Domicilio", "C/Rio Bravo, 25") htCliente.Add("Edad", 35) htCliente.Add("Credito", 250)
' obtener un array con las claves, ' y recorrer con un enumerador Dim aClaves As ICollection aClaves = htCliente.Keys Dim oEnumerador As IEnumerator oEnumerador = aClaves.GetEnumerator() Console.WriteLine("Claves del objeto Hashtable") RecorrerEnumerador(oEnumerador)
' obtener un array con los valores, ' y recorrer con un enumerador Dim aValores As ICollection = htCliente.Values Dim oEnumVal As IEnumerator = aValores.GetEnumerator() Console.WriteLine("Valores del objeto Hashtable") RecorrerEnumerador(oEnumVal)
Console.ReadLine() End Sub
Public Sub RecorrerEnumerador(ByVal oEnumerador As IEnumerator) While oEnumerador.MoveNext Console.WriteLine(oEnumerador.Current) End While Console.WriteLine()
End Sub
Código fuente 378