Las colecciones en C# son estructuras de datos que permiten almacenar y manipular grupos de objetos. A diferencia de los arrays, las colecciones proporcionan una mayor flexibilidad y funcionalidad, como la capacidad de redimensionarse automáticamente y métodos avanzados para manipular los datos.
Tipos de Colecciones
C# proporciona varias clases de colecciones en el espacio de nombres System.Collections
y System.Collections.Generic
. A continuación, se describen algunas de las colecciones más comunes:
- List
Una List<T>
es una colección genérica que puede almacenar elementos de cualquier tipo especificado. Es similar a un array, pero puede redimensionarse automáticamente.
Ejemplo:
using System; using System.Collections.Generic; class Program { static void Main() { List<int> numbers = new List<int>(); numbers.Add(1); numbers.Add(2); numbers.Add(3); foreach (int number in numbers) { Console.WriteLine(number); } } }
Explicación:
List<int> numbers = new List<int>();
crea una lista de enteros.numbers.Add(1);
agrega el número 1 a la lista.- El bucle
foreach
recorre la lista e imprime cada número.
- Dictionary<TKey, TValue>
Un Dictionary<TKey, TValue>
es una colección genérica que almacena pares clave-valor. Es útil cuando necesitas acceder a los elementos por una clave única.
Ejemplo:
using System; using System.Collections.Generic; class Program { static void Main() { Dictionary<string, int> ages = new Dictionary<string, int>(); ages["Alice"] = 30; ages["Bob"] = 25; foreach (var kvp in ages) { Console.WriteLine($"Name: {kvp.Key}, Age: {kvp.Value}"); } } }
Explicación:
Dictionary<string, int> ages = new Dictionary<string, int>();
crea un diccionario con claves de tipostring
y valores de tipoint
.ages["Alice"] = 30;
agrega una entrada con la clave "Alice" y el valor 30.- El bucle
foreach
recorre el diccionario e imprime cada par clave-valor.
- Queue
Una Queue<T>
es una colección genérica que sigue el principio FIFO (First In, First Out). Es útil para escenarios donde los elementos deben procesarse en el orden en que se agregan.
Ejemplo:
using System; using System.Collections.Generic; class Program { static void Main() { Queue<string> queue = new Queue<string>(); queue.Enqueue("First"); queue.Enqueue("Second"); queue.Enqueue("Third"); while (queue.Count > 0) { Console.WriteLine(queue.Dequeue()); } } }
Explicación:
Queue<string> queue = new Queue<string>();
crea una cola de cadenas.queue.Enqueue("First");
agrega "First" a la cola.- El bucle
while
recorre la cola y elimina e imprime cada elemento en el orden en que fueron agregados.
- Stack
Una Stack<T>
es una colección genérica que sigue el principio LIFO (Last In, First Out). Es útil para escenarios donde los elementos deben procesarse en el orden inverso al que se agregan.
Ejemplo:
using System; using System.Collections.Generic; class Program { static void Main() { Stack<string> stack = new Stack<string>(); stack.Push("First"); stack.Push("Second"); stack.Push("Third"); while (stack.Count > 0) { Console.WriteLine(stack.Pop()); } } }
Explicación:
Stack<string> stack = new Stack<string>();
crea una pila de cadenas.stack.Push("First");
agrega "First" a la pila.- El bucle
while
recorre la pila y elimina e imprime cada elemento en el orden inverso al que fueron agregados.
Ejercicios Prácticos
Ejercicio 1: Uso de List
Crea una lista de nombres de estudiantes y agrega al menos cinco nombres. Luego, imprime todos los nombres en la lista.
Solución:
using System; using System.Collections.Generic; class Program { static void Main() { List<string> students = new List<string> { "Alice", "Bob", "Charlie", "David", "Eve" }; foreach (string student in students) { Console.WriteLine(student); } } }
Ejercicio 2: Uso de Dictionary<TKey, TValue>
Crea un diccionario para almacenar las edades de diferentes personas. Agrega al menos tres entradas y luego imprime todas las claves y valores.
Solución:
using System; using System.Collections.Generic; class Program { static void Main() { Dictionary<string, int> ages = new Dictionary<string, int> { { "Alice", 30 }, { "Bob", 25 }, { "Charlie", 35 } }; foreach (var kvp in ages) { Console.WriteLine($"Name: {kvp.Key}, Age: {kvp.Value}"); } } }
Ejercicio 3: Uso de Queue
Crea una cola de tareas pendientes y agrega al menos tres tareas. Luego, procesa e imprime cada tarea en el orden en que fueron agregadas.
Solución:
using System; using System.Collections.Generic; class Program { static void Main() { Queue<string> tasks = new Queue<string>(); tasks.Enqueue("Task 1"); tasks.Enqueue("Task 2"); tasks.Enqueue("Task 3"); while (tasks.Count > 0) { Console.WriteLine(tasks.Dequeue()); } } }
Ejercicio 4: Uso de Stack
Crea una pila de libros y agrega al menos tres títulos. Luego, procesa e imprime cada título en el orden inverso al que fueron agregados.
Solución:
using System; using System.Collections.Generic; class Program { static void Main() { Stack<string> books = new Stack<string>(); books.Push("Book 1"); books.Push("Book 2"); books.Push("Book 3"); while (books.Count > 0) { Console.WriteLine(books.Pop()); } } }
Conclusión
En esta sección, hemos explorado las colecciones en C#, incluyendo List<T>
, Dictionary<TKey, TValue>
, Queue<T>
, y Stack<T>
. Estas colecciones proporcionan una forma flexible y eficiente de almacenar y manipular datos. Asegúrate de practicar con los ejercicios proporcionados para reforzar tu comprensión de estos conceptos. En el próximo módulo, profundizaremos en LINQ, una poderosa herramienta para consultar y manipular colecciones de datos.
Curso de Programación en C#
Módulo 1: Introducción a C#
- Introducción a C#
- Configuración del Entorno de Desarrollo
- Programa Hola Mundo
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
Módulo 2: Estructuras de Control
Módulo 3: Programación Orientada a Objetos
- Clases y Objetos
- Métodos
- Constructores y Destructores
- Herencia
- Polimorfismo
- Encapsulamiento
- Abstracción
Módulo 4: Conceptos Avanzados de C#
- Interfaces
- Delegados y Eventos
- Genéricos
- Colecciones
- LINQ (Consulta Integrada en el Lenguaje)
- Programación Asíncrona
Módulo 5: Trabajando con Datos
Módulo 6: Temas Avanzados
- Reflexión
- Atributos
- Programación Dinámica
- Gestión de Memoria y Recolección de Basura
- Multihilo y Programación Paralela
Módulo 7: Construcción de Aplicaciones
Módulo 8: Mejores Prácticas y Patrones de Diseño
- Estándares de Codificación y Mejores Prácticas
- Patrones de Diseño
- Pruebas Unitarias
- Revisión y Refactorización de Código