Posteado por: fzapataramirez | Domingo, septiembre 14, 2008

Colecciones de datos en C#.NET (Parte IV: HashTable)

Una tabla hash o Hash Table, es una colección que permite almacenar pares de objetos, donde el primero es conocido como llave (key) y el segundo es conocido como valor (value). De esta manera, para agregar “un” elemento a la colección, siempre se debe pasar como argumento estos dos objetos.

image

Una de las ventajas que presenta ésta colección frente a las colecciones mencionadas anteriormente (Parte I: Vectores, Parte II: ArrayList, Parte III: Stack y Queue), es el poco tiempo que tarda en realizar la búsqueda de un elemento determinado, debido a que utiliza el hash de las llaves (keys) para ordenar los elementos, permitiendo así, tener una ubicación única para cada uno.

Un Hash consiste en pocas palabras, en un código único generado por una función Hash, la cual genera una salida única para entradas diferentes y además, produce la misma salida para entradas iguales. Por estas características de una función Hash, no pueden haber llaves iguales en la tabla Hash ya que esto produciría el mismo Hash y no seria posible diferenciar unívocamente los elementos de la colección.

El comportamiento de la HashTable se puede comparar a una tabla de una base de datos relacional, donde cada tabla generalmente (en este caso obligatoriamente) tiene una llave primaria por medio de la cual se diferencia cada registro de los demás y que además su valor debe ser único en toda la tabla. De la misma manera se comporta la HashTable ya que los elementos son ordenados según su Hash.

Cuando sea necesario obtener uno de los elementos contenidos en la HashTable, se debe utilizar la llave o key con la que fue almacenada, como se muestra a continuación:

image

image

Siempre que se referencia la HashTable utilizando una Key, será retornado el valor correspondiente a dicha clave en un objeto de tipo Object, por lo que es importante convertir el dato obtenido al tipo de dato adecuado para evitar generar excepciones.
Lo anterior, permite tener en la colección pares de llaves y valor que pertenezcan a tipos de datos diferentes, es decir, nada nos obliga a que todos los elementos del HashTable sean del mismo tipo. Incluso las llaves (keys) y los valores (values), pueden ser de tipos de datos diferentes entre si. Sin embargo, no es muy recomendable utilizar la HashTable de esta manera, ya que eso implicaría conocer exactamente que elementos están incluidos en la HashTable e implicaría tener mucho mas cuidado a la hora de extraer los datos, lo cual impediría que la aplicación sea flexible y escalable.

image

image

En el ejemplo anterior se ve como se puede ingresar llaves y valores de diferentes tipos de datos. Además se puede ver como es posible ingresar un valor de tipo null, lo cual no es posible hacerlo en una de las llaves ya que se generaría la excepción ArgumentNullException.

Utilizando la sintaxis “[key]” (por ejemplo: tabla[“llave texto”]) sobre una tabla Hash, es posible actualizar el valor contenido o en caso de que la llave utilizada no exista en la tabla, se inserta este nuevo elemento.

image

La clase HashTable pertenece al espacio de nombres System.Collections e implementa las colecciones IEnumerable, ICollection, entre otras. Debido a esto, es posible utilizar la instrucción foreach para leer datos de una HashTable. Sin embargo, en cada iteracion de esta instrucción, se debe operar con un objeto de tipo DictionaryEntry que contendrá un par llave/valor.

image

Algunos de los métodos mas utilizados de la clase HashTable son:

Add: permite agregar un nuevo par llave/valor a la colección.

Remove: permite quitar un par llave/valor de la colección

ContainsKey: permite saber si la colección contiene un par cuya clave sea la que se le pasa como parámetro.

ContainsValue: permite saber si la colección contiene un par cuyo valor sea el que se le pasa como parámetro.

 

About these ads

Responses

  1. donde esta la clase

  2. ps explicado si se entiende pero la clase no

    • Pues lo siento amigo si no lo entiendes, esta clarito en el post. La clase está en el namespace System.Collections y en la entrada se explica para que sirve y como se utiliza. Si tienes alguna duda concreta y te puedo ayudar con gusto lo haré

  3. bueno de todas formas gracias, pero dudo entrar otravez a la pagina XD pero Si lo pones creo q´ les serviria a los demas

  4. Pues yo aprendi algo nuevo que si he ocupado a veces pues trae algo diferente a dictionary

  5. Me parece interesante lo que se ofrece en este sitio, pero me gustaria saber como es el comportamiento interno para realizar la busqueda de elementos cuando el key(llave) del HashTable es una cadena

  6. Men me parece muy buena y util esta información, bien explicada y clara. Gracias de todo corazón!!!

  7. Gracias por darte el tiempo y explicarnos para que sirve esta clase. Muchas gracias. Probaremos :)

  8. muchas gracias muy instructivo

  9. como se puede agregar más de un valor? tengo un ejercicio que dice que una compañia guarda empleados por: su nombre, numero de empleado y el numero de su documento de identidad..como puedo guardar esos 3 datos en una tabla hash? y que si la clave es el numero de empleado pueda obtener sus datos por medio de ella..

    • Hola

      Lo que debes hacer es crear una clase donde almacenes los datos de cada empleado y guardas en la tabla hash como llave la identificacin nica del cliente y como valor el objeto. Ejemplo:

      Class Empleado { int IdEmpleado; string Nombre; string Apellido; }

      En la HashTable se almacenar como valores las instancias de esas clase.

  10. Excelente aporte!

    Ahora a implementarlo!

  11. Excelente aporte!

    Ahora a implementarlo!

  12. Gracias por tan clara explicación!!! que sigas con tus post tan especificos como este!.

  13. PODRIAS, AYUDARME, CON UN ARCHIVO, HECHO EN C#, APLICACION CONSOLA??
    UTILIZANDO STRING..
    POR FAVOR.

  14. PODRIAS, AYUDARME, CON UN ARCHIVO, HECHO EN C#, APLICACION CONSOLA??
    UTILIZANDO HASH CON STRING..
    POR FAVOR.


Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Categorías

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

A %d blogueros les gusta esto: