Introducción a la clase
En esta clase exploraremos dos estructuras de datos clave para el almacenamiento y recuperación rápida de información: Diccionarios (Dictionary<TKey, TValue>) y HashTables (Hashtable) en C#. Estas estructuras permiten acceder a los datos mediante una clave, optimizando la eficiencia en comparación con listas o arrays.
¿Qué obtendrás de esta clase?
- Comprender cómo funcionan los diccionarios y tablas hash en C#.
- Aprender a implementar Dictionary<TKey, TValue> y Hashtable.
- Conocer sus diferencias y ventajas en términos de rendimiento.
- Aplicar estas estructuras en casos reales con ejemplos prácticos.
Diccionarios en C#
Un diccionario (Dictionary<TKey, TValue>) es una colección que almacena datos en pares clave-valor, lo que permite acceder rápidamente a un valor usando su clave.
Características de un Diccionario
- Búsqueda rápida en O(1) gracias al uso de funciones hash.
- Clave única: No permite duplicados en las claves.
- Acceso directo a los valores sin recorrer la estructura.
Implementación de un Diccionario en C#
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
Dictionary<string, string> paises = new Dictionary<string, string>
{
{ "ARG", "Argentina" },
{ "BRA", "Brasil" },
{ "USA", "Estados Unidos" }
};
Console.WriteLine("Ingrese el código de un país:");
string codigo = Console.ReadLine();
if (paises.ContainsKey(codigo))
{
Console.WriteLine("País: " + paises[codigo]);
}
else
{
Console.WriteLine("Código no encontrado.");
}
}
}
Operaciones principales en un Diccionario
Operación | Descripción | Complejidad |
---|---|---|
Add(clave, valor) | Agrega un par clave-valor | O(1) |
Remove(clave) | Elimina un elemento por su clave | O(1) |
ContainsKey(clave) | Verifica si una clave existe | O(1) |
TryGetValue(clave, out valor) | Obtiene un valor sin lanzar excepción | O(1) |
HashTable en C#
Una HashTable es similar a un Dictionary, pero más antigua y menos optimizada.
Características de HashTable
- Almacena datos como pares clave-valor.
- No es genérica, lo que implica conversiones de tipo (boxing/unboxing).
- Puede almacenar claves de diferentes tipos, pero esto es menos seguro.
Implementación de una HashTable en C#
using System;
using System.Collections;
class Program
{
static void Main()
{
Hashtable empleados = new Hashtable();
empleados.Add(101, "Ana");
empleados.Add(102, "Carlos");
empleados.Add(103, "Pedro");
Console.WriteLine("Ingrese un ID de empleado:");
int id = Convert.ToInt32(Console.ReadLine());
if (empleados.ContainsKey(id))
{
Console.WriteLine("Empleado: " + empleados[id]);
}
else
{
Console.WriteLine("ID no encontrado.");
}
}
}
Diferencias entre Diccionario y HashTable
Característica | Diccionario (Dictionary<TKey, TValue>) | HashTable |
---|---|---|
Genérico | Sí (Dictionary<int, string> ) | No |
Rendimiento | Más rápido y optimizado | Más lento |
Seguridad de tipos | Estricto (solo acepta tipos definidos) | Permite cualquier tipo (requiere casting) |
Uso recomendado | Aplicaciones modernas en C# | Código antiguo o interoperabilidad |
Caso de uso real
Un sistema de autenticación de usuarios puede utilizar un diccionario para almacenar usuarios y contraseñas encriptadas.
Ejemplo en C#: Autenticación con Diccionario
using System;
using System.Collections.Generic;
class Autenticacion
{
static void Main()
{
Dictionary<string, string> usuarios = new Dictionary<string, string>
{
{ "admin", "1234" },
{ "usuario1", "abcde" }
};
Console.WriteLine("Ingrese usuario:");
string usuario = Console.ReadLine();
Console.WriteLine("Ingrese contraseña:");
string contraseña = Console.ReadLine();
if (usuarios.ContainsKey(usuario) && usuarios[usuario] == contraseña)
{
Console.WriteLine("Acceso concedido.");
}
else
{
Console.WriteLine("Usuario o contraseña incorrectos.");
}
}
}
Este ejemplo permite almacenar usuarios y validar credenciales rápidamente con O(1) en búsquedas.
Desafío práctico
Ejercicio:
- Crea un diccionario que almacene nombres de productos y sus precios. Permite al usuario buscar el precio ingresando el nombre del producto.
- Implementa una HashTable para almacenar códigos de empleados y sus roles en la empresa, permitiendo al usuario consultar su rol ingresando el código.
Resumen de la clase
- Diccionarios: Estructura clave-valor con acceso en O(1).
- HashTables: Similar a los diccionarios, pero menos eficiente y sin tipado genérico.
- Diferencias entre ambas estructuras y cuándo usarlas.
- Caso de uso real aplicado a sistemas de autenticación.
Próxima clase: Árboles y Grafos – Conceptos básicos y usos
En la siguiente clase aprenderemos sobre Árboles y Grafos, estructuras utilizadas para representar datos de manera jerárquica o en redes, aplicadas en sistemas como redes sociales, navegación GPS y bases de datos.