CSharp: Colecciones y LINQ

Aprende a dominar colecciones y LINQ en C# con esta guía avanzada para desarrolladores de software. Mejora tu código y optimiza tus consultas.

En C#, las colecciones representan una parte esencial del manejo de datos. Proporcionan mecanismos para almacenar, recuperar y manipular conjuntos de datos de manera eficiente. Las colecciones más utilizadas en C# incluyen List<T>, Dictionary<TKey, TValue>, Queue<T>, y Stack<T>. Cada una tiene sus propias características y casos de uso específicos.

List

List<T> es una colección genérica que permite almacenar elementos de un tipo específico. Se utiliza cuando necesitas una colección que puede crecer dinámicamente.

List<int> numeros = new List<int> { 1, 2, 3, 4, 5 };
numeros.Add(6);
Console.WriteLine(string.Join(", ", numeros));

Dictionary<TKey, TValue>

Dictionary<TKey, TValue> es una colección que almacena pares clave-valor. Es útil cuando necesitas buscar valores asociados a claves de manera eficiente.

Dictionary<string, int> edades = new Dictionary<string, int>
{
    { "Juan", 30 },
    { "Ana", 25 },
    { "Luis", 35 }
};
Console.WriteLine(edades["Ana"]);

Queue

Queue<T> sigue el principio FIFO (First In, First Out). Es útil para escenarios como procesamiento de tareas en orden.

Queue<string> cola = new Queue<string>();
cola.Enqueue("Tarea1");
cola.Enqueue("Tarea2");
Console.WriteLine(cola.Dequeue());

Stack

Stack<T> sigue el principio LIFO (Last In, First Out). Se utiliza en escenarios como la gestión de llamadas de funciones.

Stack<string> pila = new Stack<string>();
pila.Push("Elemento1");
pila.Push("Elemento2");
Console.WriteLine(pila.Pop());

Introducción a LINQ en C#

LINQ (Language Integrated Query) es una característica de C# que permite realizar consultas sobre colecciones de datos con una sintaxis similar a SQL. LINQ proporciona una forma declarativa de trabajar con datos.

Consultas básicas con LINQ

Filtrado

El operador Where se utiliza para filtrar elementos de una colección.

List<int> numeros = new List<int> { 1, 2, 3, 4, 5, 6 };
var numerosPares = numeros.Where(n => n % 2 == 0);
Console.WriteLine(string.Join(", ", numerosPares));

Proyección

El operador Select permite transformar los elementos de una colección.

List<int> numeros = new List<int> { 1, 2, 3, 4, 5 };
var cuadrados = numeros.Select(n => n * n);
Console.WriteLine(string.Join(", ", cuadrados));

Operaciones avanzadas con LINQ

Agrupación

El operador GroupBy permite agrupar elementos de una colección.

var personas = new List<(string Nombre, int Edad)>
{
    ("Juan", 30),
    ("Ana", 25),
    ("Luis", 35),
    ("Maria", 25)
};
var gruposPorEdad = personas.GroupBy(p => p.Edad);
foreach (var grupo in gruposPorEdad)
{
    Console.WriteLine($"Edad: {grupo.Key}");
    foreach (var persona in grupo)
    {
        Console.WriteLine($"  Nombre: {persona.Nombre}");
    }
}

Unión

El operador Join permite combinar dos colecciones basándose en una clave común.

var personas = new List<(int Id, string Nombre)>
{
    (1, "Juan"),
    (2, "Ana"),
    (3, "Luis")
};
var edades = new List<(int Id, int Edad)>
{
    (1, 30),
    (2, 25),
    (3, 35)
};
var personasConEdad = personas.Join(
    edades,
    persona => persona.Id,
    edad => edad.Id,
    (persona, edad) => new { persona.Nombre, edad.Edad }
);
foreach (var persona in personasConEdad)
{
    Console.WriteLine($"Nombre: {persona.Nombre}, Edad: {persona.Edad}");
}
Certifícate en CSharp con CertiDevs PLUS

Lecciones de este módulo de CSharp

Lecciones de programación del módulo Colecciones y LINQ del curso de CSharp.

Ejercicios de programación en este módulo de CSharp

Evalúa tus conocimientos en Colecciones y LINQ con ejercicios de programación Colecciones y LINQ de tipo Test, Puzzle, Código y Proyecto con VSCode.