domingo, 19 de noviembre de 2017

Diccionarios en C# - Parte 1/6: IDictionary(TKey, TValue)

Índice

1. Introducción
2. Palabras Clave
3. La Interfaz IDictionary<TKey, TValue>
4. Ejemplo de Uso
5. Conclusiones
6. Literatura & Enlaces

1. Introducción

Entramos al estudio de los diccionarios: una estructura de datos o colección donde los elementos se representan con dos partes: una llave y un valor. Facilita la búsqueda, y es apropiada para listas ordenadas. En esta serie comprenderemos las interfaces que provee .NET para los diccionarios: IDictionary y IDictionary(TKey, TValue). También se incluye la descripción de implementaciones: OrderedDictionary, HybridDictionary y ListDictionary.


Este primer artículo describe la interfaz IDictionary(TKey, TValue), la cual constituye la interfaz para colecciones genéricas basadas en una llave y un valor.

2. Palabras Clave

  • Diccionario
  • Estructura de Datos
  • Llave
  • Valor

3. Diccionario


En el mundo de las colecciones o estructuras de datos un diccionario dispone los elementos por una llave y un valor asociado a esa llave. Para acceder a un elemento basta con especificar su llave; luego, la llave se puede ver como la palabra en un diccionario enciclopédico y su valor como su definición.
Analogía con diccionario enciclopédico
Figura 1. Analogía con diccionario enciclopédico ("Imagen diccionario", 2017).

Entre las características distintivas de esta estructura se hallan (Albahari, 2012)
  • Los datos o contenido de un elemento se acceden a través de un valor único.
  • El acceso tiene un complejidad O(1).
  • Una de la llave es través de un algoritmo de hash.
  • La estructura se análoga a un mapa: dado un nombre se accede a la locación concreta donde se haya el elemento.
  • Es posible tener como llave un valor null.
  • Se puede especificar un enumerador pero sin la promesa que el contenido esté ordenado.
En C# existen diferentes implementaciones de diccionario: la primera que se va a estudiar es IDictionary<TKey, TValue>.

3. La Interfaz IDictionary<TKey, TValue>

Esta interfaz representa un diccionario con llave y valor genéricos: TKey, TValue. En la firma de encabezado de esta interfaz se aprecia que implementa la interfaz genérica ICollection<KeyValuePair<TKey, TValue>>; y así mismo la adaptación a estructura enumerable con IEnumerable<KeyValuePair<TKey, TValue>>.

Entre sus propiedades genéricas se hallan ("IDictionary", 2017)
  • Count: Obtiene el número de elementos en el diccionario; i.e., la cantidad de llaves.
  • Keys: Llaves del diccionario.
  • Values: Valores del diccionario.
Y así mismo, estos métodos ("IDictionary", 2017):
  • Add(T): Agrega un elemento al diccionario.
  • Add(TKey, TValue): Agrega un elemento a partir de una llave y un valor.
  • Contains(T): Comprueba si un elemento existe en la colección.
  • Remove(T): Remueve la primera ocurrencia.
  • Remove(TKey): Remueve un elemento a través de su llave.
Para el método Add vale apuntar que si se intenta agregar un elemento con la misma llave, la excepción ArgumentException (Excepciones en C# - Parte 5: Ejemplos de Excepciones Comunes) es lanzada.

Para la enumeración de los elementos se provee el método GetEnumerator. Este método retorna una secuencia de objetos KeyValuePair: representa la llave y el valor de cada uno de los elementos que contiene el diccionario.

4. Ejemplo de Uso

Veamos el siguiente ejemplo de uso básico:

En la línea 10 se crea una instancia de la implementación concreta de IDictionary<TKey, TValue>. Esta instancia representa la asociación de extensiones de tipos de archivos con el programa manejador para apertura: en las líneas 13-16 se agregan los elementos, y luego, en las líneas 18-22 se itera el diccionario: notemos aquí que cada elemento se presenta con un objeto KeyValuePair<string, string>.

5. Conclusiones

Describimos la interfaz IDictionary<TKey, TValue>: representación general o abstracta de una estructura de datos basada en diccionario: cada elemento se presenta por dos ítems: una llave y un valor. Su analogía principal es la de Dictionary<TKey, TValue>.

6. Literatura & Enlaces

Albahari, J., Albahari, B. (2012). C# 5.0 in a Nutshell. United States: O'Reilly Media.

Imagen diccionario (2017). Recuperado desde: https://androidayuda.com/app/uploads/2015/02/diccionario-2.jpg
IDictionary(TKey, TValue) Interface (System.Collections.Generic) (2017). Recuperado desde: https://msdn.microsoft.com/en-us/library/s4ys34ea(v=vs.110).aspx
Excepciones en C# - Parte 5: Ejemplos de Excepciones Comunes (2017). Recuperado desde: https://ortizol.blogspot.com.co/2014/07/excepciones-en-csharp-parte-5-ejemplos-de-excepciones-comunes.html


O

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.