Un Diccionario en C# es una colección genérica que permite almacenar pares clave-valor. Proporcionan una forma muy eficiente de realizar búsquedas, inserciones y eliminaciones.
La clase Dictionary<TKey, TValue>
en el espacio de nombres System.Collections.Generic
es la implementación estándar de esta estructura de datos en C#.
Las claves deben ser únicas y no pueden ser nulas, mientras que los valores pueden ser duplicados y nulos.
Si quieres aprender más sobre Diccionarios
consulta el Curso de Introducción a la Programación leer más
Declaración e inicialización de diccionarios
Para declarar un diccionario en C#, se utiliza la siguiente sintaxis:
Dictionary<tipoClave, tipoValor> nombreDiccionario;
Por ejemplo, si queremos crear un Diccionario que almacene nombres de personas y sus edades, podemos utilizar la siguiente sintaxis:
Dictionary<string, int> edades = new Dictionary<string, int>();
En este ejemplo, hemos creado un Diccionario llamado edades
que utiliza cadenas de texto como claves y enteros como valores.
Creación de un diccionario
Una vez declarado el diccionario, antes de poder usarlo debemos inicializarlo. Para ello debemos crear una nueva diccionario, y asignarla a la variable que hemos declarado anteriormente.
O, alternativamente, podemos hacerlo en el mismo momento en que declaramos nuestra Diccionario. Asi:
Dictionary<string, int> edades = new Dictionary<string, int>();
// equivalente
var edades = new Dictionary<string, int>();
Dictionary<string, int> edades = new ();
Inicialización de diccionarios
Alternativamente, también podemos inicializar el diccionario a una serie de valores conocidos.
Dictionary<string, int> edades = new ()
{
{ "Luis", 25 },
{ "María", 30 },
{ "Pedro", 28 }
};
Uso básico del diccionario
Añadir elementos a un diccionario
Para añadir elementos a un diccionario, se utiliza el método Add
o el índice de la clave:
edades.Add("Luis", 32);
edades["Ana"] = 22;
Acceder a elementos de un diccionario
Los elementos de un diccionario se pueden acceder mediante sus claves:
int edadDeLuis = edades["Luis"];
Modificar elementos de un diccionario
Para modificar el valor asociado a una clave existente, simplemente se asigna un nuevo valor a esa clave:
edades["María"] = 35;
Eliminar elementos de un diccionario
Para eliminar elementos de un diccionario
edades.Remove("Pedro");
Enumerar elementos en un diccionario
Para recorrer todos los elementos de un diccionario, se puede usar un bucle foreach
:
foreach (var item in edades)
{
Console.WriteLine($"Nombre: {item.Key}, Edad: {item.Value}");
}
Limpiar todo el diccionario
edades.Clear();
Propiedades y métodos útiles
Propiedad Count
La propiedad Count
devuelve el número de pares clave-valor en el diccionario:
int cantidad = edades.Count;
Método ContainsKey
El método ContainsKey
verifica si una clave específica está presente en el diccionario:
bool contieneLuis = edades.ContainsKey("Luis");
Método ContainsValue
El método ContainsValue
verifica si un valor específico está presente en el diccionario:
bool contieneEdad30 = edades.ContainsValue(30);
Método TryGetValue
El método TryGetValue
intenta obtener el valor asociado a una clave, devolviendo un valor booleano que indica si la operación fue exitosa:
int edad;
bool existe = edades.TryGetValue("Luis", out edad);
if (existe)
{
Console.WriteLine($"La edad de Luis es: {edad}");
}
else
{
Console.WriteLine("Luis no está en el diccionario");
}
Ejemplos prácticos
Almacenar información de estudiantes y sus calificaciones
En este ejemplo, se muestra cómo almacenar las calificaciones de varios estudiantes en un diccionario y calcular el promedio de cada uno.
// Crear un diccionario para almacenar las calificaciones de los estudiantes
var calificacionesEstudiantes = new Dictionary<string, List<int>>();
// Agregar calificaciones para cada estudiante
calificacionesEstudiantes["Luis"] = new List<int> { 90, 85, 88 };
calificacionesEstudiantes["María"] = new List<int> { 95, 92, 89 };
calificacionesEstudiantes["Pedro"] = new List<int> { 78, 84, 80 };
// Iterar sobre el diccionario y calcular el promedio de cada estudiante
foreach (var alumno in calificacionesEstudiantes)
{
string nombre = alumno.Key; // Nombre del estudiante
var calificaciones = alumno.Value; // Lista de calificaciones del estudiante
double promedio = calificaciones.Average(); // Calcular el promedio
Console.WriteLine($"Estudiante: {nombre}, Promedio: {promedio}");
}
Buscar el precio de un producto específico
En este ejemplo, se muestra cómo buscar el precio de un producto específico utilizando un diccionario.
// Crear un diccionario para almacenar los precios de los productos
var preciosProductos = new Dictionary<string, double>();
// Agregar precios para cada producto
preciosProductos["Manzana"] = 1.2;
preciosProductos["Banana"] = 0.5;
preciosProductos["Naranja"] = 0.8;
// Buscar el precio de un producto específico
string productoBuscar = "Banana";
if (preciosProductos.TryGetValue(productoBuscar, out double precio))
{
Console.WriteLine($"Producto: {productoBuscar}, Precio: {precio}");
}
else
{
Console.WriteLine($"El producto {productoBuscar} no se encuentra en el diccionario.");
}
Buscar el departamento de una lista de empleados
En este ejemplo, se muestra cómo utilizar un diccionario para realizar búsquedas rápidas. Suponiendo que tenemos un diccionario que tiene el departamento de cada persona, y una lista muy larga de personas que queremos buscar.
// Crear un diccionario para almacenar los departamentos de los empleados
// Suponemos que 'departamentosEmpleados' ya está poblado con miles de entradas
var departamentosEmpleados = new Dictionary<string, string>();
// Lista de empleados a buscar
// En el ejemplo hay 5 personas, pero supongamos que esta lista sea muy muy grande
List<string> empleadosABuscar = [ "Ana", "Luis", "Carlos", "Pedro", "María" ];
// Realizar búsquedas rápidas usando el diccionario
foreach (string empleadoBuscar in empleadosABuscar)
{
if (departamentosEmpleados.TryGetValue(empleadoBuscar, out string departamento))
{
Console.WriteLine($"Empleado: {empleadoBuscar}, Departamento: {departamento}");
}
else
{
Console.WriteLine($"El empleado {empleadoBuscar} no se encuentra en el diccionario.");
}
}