Las expresiones lambda y LINQ en C# permiten realizar operaciones avanzadas sobre colecciones de datos de manera eficiente. A continuación, se presentan ejercicios más complejos para desarrollar un dominio más profundo sobre su uso.
Ejercicio 1: Encontrar los 3 números más grandes
Instrucciones: Dada una lista de números, usa LINQ para encontrar los tres valores más altos.
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int> numeros = new List<int> { 5, 12, 45, 32, 18, 29, 54, 3 };
var top3 = numeros.OrderByDescending(n => n).Take(3).ToList();
Console.WriteLine("Los 3 números más grandes son:");
top3.ForEach(n => Console.Write(n + " "));
}
}
Ejercicio 2: Agrupar palabras por longitud
Instrucciones: Dada una lista de palabras, agrúpalas por su número de caracteres.
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<string> palabras = new List<string> { "hola", "mundo", "LINQ", "expresión", "lambda", "csharp" };
var grupos = palabras.GroupBy(p => p.Length);
foreach (var grupo in grupos)
{
Console.WriteLine($"Longitud {grupo.Key}:");
foreach (var palabra in grupo)
{
Console.WriteLine(" - " + palabra);
}
}
}
}
Ejercicio 3: Obtener los productos con precio superior al promedio
Instrucciones: Dada una lista de productos, selecciona aquellos cuyo precio sea mayor que el precio promedio.
using System;
using System.Collections.Generic;
using System.Linq;
class Producto
{
public string Nombre { get; set; }
public double Precio { get; set; }
}
class Program
{
static void Main()
{
List<Producto> productos = new List<Producto>
{
new Producto { Nombre = "Laptop", Precio = 1200 },
new Producto { Nombre = "Teléfono", Precio = 800 },
new Producto { Nombre = "Tablet", Precio = 500 },
new Producto { Nombre = "Monitor", Precio = 300 }
};
double precioPromedio = productos.Average(p => p.Precio);
var productosCaros = productos.Where(p => p.Precio > precioPromedio).ToList();
Console.WriteLine("Productos con precio superior al promedio:");
productosCaros.ForEach(p => Console.WriteLine($"{p.Nombre}: ${p.Precio}"));
}
}
Ejercicio 4: Contar cuántas veces aparece cada palabra en una oración
Instrucciones: Dada una oración, cuenta la frecuencia de cada palabra.
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
string texto = "el sol brilla en el cielo y el mar refleja la luz del sol";
var palabras = texto.Split(' ');
var conteo = palabras.GroupBy(p => p).Select(g => new { Palabra = g.Key, Cantidad = g.Count() }).ToList();
Console.WriteLine("Frecuencia de palabras:");
conteo.ForEach(p => Console.WriteLine($"{p.Palabra}: {p.Cantidad}"));
}
}
Ejercicio 5: Filtrar y ordenar una lista de empleados
Instrucciones: Dada una lista de empleados, filtra aquellos con salario superior a 2000 y ordénalos de mayor a menor.
using System;
using System.Collections.Generic;
using System.Linq;
class Empleado
{
public string Nombre { get; set; }
public double Salario { get; set; }
}
class Program
{
static void Main()
{
List<Empleado> empleados = new List<Empleado>
{
new Empleado { Nombre = "Ana", Salario = 2500 },
new Empleado { Nombre = "Carlos", Salario = 1800 },
new Empleado { Nombre = "Bruno", Salario = 3000 },
new Empleado { Nombre = "David", Salario = 2200 }
};
var empleadosFiltrados = empleados.Where(e => e.Salario > 2000).OrderByDescending(e => e.Salario).ToList();
Console.WriteLine("Empleados con salario superior a 2000 ordenados de mayor a menor:");
empleadosFiltrados.ForEach(e => Console.WriteLine($"{e.Nombre}: ${e.Salario}"));
}
}
Conclusión
Estos ejercicios avanzados permiten explorar el verdadero potencial de las expresiones lambda y LINQ en C#. Desde ordenar datos hasta realizar cálculos complejos, estas herramientas proporcionan una forma elegante y eficiente de manipular colecciones.
¡Sigue practicando y aplicando estas técnicas en tus proyectos para mejorar tu dominio en LINQ!
