Iteración sobre un diccionario en C#: guía completa para principiantes y profesionales

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Diccionarios en C#: ¿por qué son importantes y cómo trabajar con ellos?



Imagina que eres un bibliotecario. Tienes miles de libros y necesitas encontrar uno específico en segundos. ¿Revisarías todos los libros uno por uno? No, usarías un catálogo. El diccionario (Dictionary) en C# es precisamente ese catálogo. Almacena pares "clave-valor" y permite obtener datos al instante mediante una clave.



Pero, ¿qué hacer cuando no necesitas encontrar una sola entrada, sino procesar todo el contenido del diccionario? Por ejemplo, mostrar todas las configuraciones de una aplicación, calcular el total de un carrito de compras en línea o serializar datos a JSON. Aquí surge la pregunta clásica: "How to iterate over a dictionary?".



En Stack Overflow, esta pregunta ha acumulado miles de visitas. Y con razón: parece sencillo, pero los principiantes suelen tropezar con los tipos de datos, y los profesionales, con el rendimiento. En este artículo, analizaremos todas las formas de iterar sobre un diccionario en C#: desde el simple foreach hasta el avanzado LINQ. ¡Allá vamos!



1. Base: estructura del Dictionary en C#



Antes de iterar, recordemos cómo se ve un diccionario en C#. Es una colección genérica del espacio de nombres System.Collections.Generic.



Dictionary<string, int> edades = new Dictionary<string, int>(){    { "Ana", 25 },    { "Bruno", 30 },    { "Carlos", 35 }};


Cada elemento del diccionario es una estructura KeyValuePair<TKey, TValue>. Tiene dos propiedades: Key y Value. Con este par trabajaremos al recorrerlo.



2. Clásico: foreach sobre el diccionario



La forma más común de iterar sobre un diccionario en C# es el bucle foreach. Es conciso, legible y seguro.



foreach (KeyValuePair<string, int> kvp in edades){    Console.WriteLine($"{kvp.Key}: {kvp.Value} años");}


Salida:

Ana: 25 añosBruno: 30 añosCarlos: 35 años


Nota: kvp es un KeyValuePair. No intentes modificar la clave o el valor dentro del bucle: el diccionario se volvería inconsistente y obtendrías una excepción InvalidOperationException.



Consejo de profesional: Si te da pereza escribir el tipo completo, usa var:

foreach (var kvp in edades) { ... }


3. Solo claves o solo valores



A veces no necesitamos el par completo. Por ejemplo, solo queremos mostrar la lista de todas las claves (nombres) o de todos los valores (edades). Para eso, el diccionario tiene las propiedades Keys y Values.



Iteración sobre claves

foreach (string nombre in edades.Keys){    Console.WriteLine($"Nombre: {nombre}");}


Iteración sobre valores

foreach (int edad in edades.Values){    Console.WriteLine($"Edad: {edad}");}


Esto es más rápido que obtener un KeyValuePair si no necesitas la otra parte. Además, el código queda más limpio.



4. Acceso por índice: for y ElementAt



Muchos principiantes intentan usar for (int i = 0; i < dict.Count; i++). Pero Dictionary en C# no admite un indexador por número. ¡Intentar escribir dict[i] provocará un error de compilación!



Sin embargo, se puede sortear: obtén la colección de pares con .ToList() y accede por índice.



var lista = edades.ToList();for (int i = 0; i < lista.Count; i++){    Console.WriteLine($"{lista[i].Key}: {lista[i].Value}");}


Desventajas:

  • Se crea una copia adicional de los datos (memoria + tiempo).
  • Se pierde el sentido del diccionario como arreglo asociativo.

Este método solo debería usarse si necesitas imperiosamente un índice (por ejemplo, para procesamiento paralelo con división en partes).



5.

Blogs

Book Recommendations