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
foreachrecorre 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 tipostringy valores de tipoint.ages["Alice"] = 30;agrega una entrada con la clave "Alice" y el valor 30.- El bucle
foreachrecorre 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
whilerecorre 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
whilerecorre 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
