Utilizando LINQ por primera vez
Clase 5 de 26 • Curso de Manejo de Datos en C# con LINQ
Contenido del curso
Clase 5 de 26 • Curso de Manejo de Datos en C# con LINQ
Contenido del curso
Eliab Lopez Murillo
Samuel Schulz
Miguel Angel Reyes Moreno
Mauricio Alejandro Escobar Sejas
Juan Diego Sánchez Rodríguez
kolab Linkear
Jose Alvaro Japa Salazar
Lautaro Martinez
Mario Alejandro Leyva Gil
Carolina Patiño
Miguel Teheran
Jose Alberto Zavala Flores
Francisco Ponce
Lautaro Martinez
Luis Gustavo LLanque
Miguel Teheran
Lautaro Martinez
Lautaro Martinez
Lautaro Martinez
Joseling Jomara González Contreras
Leonardo Valdivieso
José Ángel Soriano Soriano
Hola gente, para los que quieran hacer el ejercicio en VS Code y no recuerden como configurar un proyecto de consola rápidamente, les tengo los comandos que enseño el profe en clases anteriores:
Crean la carpeta del proyecto
Dentro de la carpeta ejecutan dotnet new console
Por último ejecutan dotnet build y dotnet run
Ahora, si lo que quieren es mantener el proyecto en modo "watch" y que se vuelva a compilar con cualquier cambio en el código, tienen que hacer lo siguiente:
Instalan la herramienta "dotnet watch" de manera global con la siguiente línea de comando dotnet tool install --global dotnet-watch
Ejecutan dotnet watch run y listo
No se les olvide que deben tener instalado .Net Core en su sistema y además la extensión oficial de C# en VS Code.
Esto es un poco más amigable de leer:
using System; using System.Linq; class Program { public static void Main (string[] args) { var frutas = new string[] {"Sandia", "Fresa", "Mango", "Mango de azúcar", "Mango Tomy"}; var mangoList = frutas.Where(fruit => fruit.StartsWith("Mango")).ToList(); mangoList.ForEach(mango => Console.WriteLine(mango)); } }
Como dato las funciones de LINQ son funciones puras. es decir que no altera la coleccion de elementos sino que devuelve una nueva coleccion con los resultados.
Pure vs Impure Functions in Functional Programming – What's the Difference? (freecodecamp.org)
Así es, es lo que se llama Programación Funcional.
En c# no es necesario inicializar con new una List:
tienes toda la razón mejoraste el codigo
no es una List es un Array y lo que decís es correcto.
El profe no lo puso de esa forma pq a la fecha de grabación del curso esa sintaxis no estaba disponible, ya que es una feature de .NET 8 que salió en noviembre de 2023 y el curso es de noviembre de 2022.
Incluso se puede inicializar con [], por ejemplo:
int[] array2 = [1, 2, 3, 4, 5, 6];
The array reference type - C# reference | Microsoft Learn
Where Necesita una condición que de como resultado true or false para filtrar una colección, cada vez que esta condición se cumpla agrega este elemento a una colección nueva la cual regresa como resultado después de filtrar toda la colección.
Cual es la diferencia entre colección y lista?
Como concepto es lo mismo en términos generales, ya lo que seria la diferencia entre Collection y List en C# puedes verla acá: https://stackoverflow.com/questions/271710/collectiont-versus-listt-what-should-you-use-on-your-interfaces
¿Qué tanta diferencia existe en el performance entre hacerlo con programación declarativa e imperativa? por ejemplo, entre recorrer una lista usando un foreach vs un for. ¿El uso de linq tiene afectación directa en el rendimiento?
En C#, la diferencia de rendimiento entre la programación declarativa y la imperativa depende de la situación específica y puede variar ampliamente. En general, la programación declarativa, como LINQ, tiende a ser más legible y mantenible que la programación imperativa.
En cuanto al recorrido de una lista, la diferencia de rendimiento entre un foreach y un for es generalmente mínima y, en muchos casos, puede ser imperceptible. Sin embargo, hay situaciones en las que un for puede ser más rápido que un foreach, especialmente cuando se realizan muchas operaciones en el interior del bucle.
El uso de LINQ puede afectar el rendimiento, pero esto depende de la complejidad de la consulta y de cómo se utiliza. LINQ utiliza una programación declarativa que puede resultar en un código más conciso y legible que la programación imperativa, pero a veces puede ser más lento que el código imperativo debido a la complejidad de la consulta y a la sobrecarga adicional.
string[] fruits = [ "Apple", "Banana", "Cherry", "Palta Hass", "Grapes", "Palta Criolla" ]; var filteredFruits = fruits.Where(f => f.StartsWith("Palta")); // Esto imprimirá el tipo de la variable, no los elementos Console.WriteLine(filteredFruits); //System.Linq.Enumerable+ArrayWhereIterator`1[System.String] foreach (var item in filteredFruits) { Console.WriteLine(item); } // convertimos el resultado a una List porque Where devuelve un IEnumerable filteredFruits.ToList().ForEach(f => Console.WriteLine(f)); // .ToList() se podría omitir si solo queremos imprimir los elementos, // pero es útil si queremos manipular la colección después porque List tiene más métodos disponibles que IEnumerable.
¿porqué usas var, si ya conoces el tipo de dato de la variable?
var, ayuda a reducir lo larga que son las lines de código que uno escribe. var es muy polemico, algunos odian usarla y otros la aman, es muy a gusto de cada quien como usarla.
Justamente porque ya la conoces, entonces dejas que el compilador la autocomplete al compilar y tu solo escribes var en lugar del mucho texto del tipo de dato o la clase.
El compilador online que se muestra en el video Replit pide crease cuenta para utilizarlo (es gratis). Yo prefiero este: Online C# Compiler - Programiz que se puede utilizar directamente y sin cuenta.
De todas formas, lo mejor me parece crear un nuevo proyecto de consola con dotnet new console y jugar en local, que seguro es lo que se hace en la siguiente clase.
Los arrays se pueden inicializar de manera directa, sin new por ejemplo:
int[] array = [1, 2, 3, 4, 5, 6];
Es una feature de .NET 8 que salió en noviembre de 2023 y el curso es de noviembre de 2022.
The array reference type - C# reference | Microsoft Learn
My screenshot of the practice class
using System; using System.Linq; class Program { static void Main(string[] args) { var frutas = new string[] { "Sandia", "Fresa", "Mango","Mango Azucar", "Naranja", "Tomate", "Mango Tomy", "Ananá"}; var MangoList = frutas.Where(p => p.StartsWith("Mango")).ToList(); Console.WriteLine("Frutas de Mango"); MangoList.ForEach(p => Console.WriteLine(p)); var FrutaList = frutas.Where(p => p.EndsWith("a")).ToList(); Console.WriteLine("Frutas terminadas en a"); FrutaList.ForEach(p2 => Console.WriteLine(p2)); } }
using System; using System.Linq;
class Program { static void Main(string[] args) { var frutas = new string[] { "Sandia", "Fresa", "Mango", "Mango Azucar", "Mango Tomy"}; var MangoList = frutas.Where(p => p.StartsWith("Mango")).ToList(); MangoList.ForEach(p => Console.WriteLine(p));
var MangoList2 = frutas.Where(p => p.Equals("Sandia")).ToList(); MangoList2.ForEach(p2 => Console.WriteLine(p2)); }
}