Saltar al pie de página
Iron Academy Logo
Aprender C#
Aprender C#

Otras categorías

Lista de comprensión de C#

Layla Porter
14m 6s

La clase List en C#, que es un tipo de colección versátil. Se basa en una matriz dinámica como estructura de datos interna, lo que permite una manipulación eficaz de los elementos. Cuando se crea una Lista, se puede especificar una capacidad inicial por defecto para optimizar el uso de memoria desde el principio. Esta capacidad es el número de elementos que la lista puede contener inicialmente sin reasignar memoria.

En el vídeo de Layla Porter "C# para principiantes Parte 7 - Consulta de datos con LINQ", se sumerge en la funcionalidad de las listas de C#, demostrando cómo aprovechar LINQ (Language Integrated Query) para consultar datos de forma eficaz. Este artículo desglosa los conceptos clave y los ejemplos del vídeo de Layla, ofreciendo una comprensión completa de las listas de C# para principiantes.

Introducción a las listas en C

Como menciona Layla al principio de su vídeo (0:03), una lista en C# es una estructura de datos versátil que permite a los desarrolladores almacenar y manipular una colección de elementos. A diferencia de las matrices, las listas pueden cambiar de tamaño dinámicamente, lo que las hace ideales para situaciones en las que no se conoce de antemano el número de elementos.

El uso de una lista es sencillo. Puede añadir elementos a la lista utilizando el método Add, que añade el objeto especificado al final de la lista. La lista utiliza un índice basado en cero, lo que significa que se accede al primer elemento en el índice 0. También puede acceder a los elementos por un índice especificado utilizando la notación de corchetes ([]).

Para iterar a través de la lista, puede utilizar un bucle foreach, que itera sobre cada elemento en el orden en que aparecen. Si necesita encontrar la primera aparición de un elemento específico, puede utilizar métodos como IndexOf con un predicado, que busca basándose en una condición especificada.

List está fuertemente tipada, lo que significa que contiene objetos de un tipo específico (T). Esto garantiza la seguridad de tipo y permite el uso de métodos y propiedades definidos por el tipo de objeto especificado. Por defecto, List utiliza una función hash predeterminada para organizar los elementos de forma eficiente.

Echemos un vistazo en profundidad al funcionamiento de los métodos de las clases List y List, tal y como demuestra Layla en su vídeo.

Creación de una lista

Al crear una lista en C#, puede establecer una capacidad inicial especificada para optimizar la estructura de datos interna. Las listas son versátiles y pueden inicializarse a partir de una colección específica de elementos. Puedes acceder a los elementos mediante un índice int e iterar a través de ellos mediante un bucle foreach. A diferencia de los diccionarios, las listas no dependen de una función hash predeterminada y almacenan objetos fuertemente tipados, lo que garantiza la seguridad de tipos y la coherencia en la gestión de datos.

En (0:44), Layla crea una lista de quesos, ilustrando cómo inicializar y rellenar una lista. En C#, se puede crear una lista utilizando la clase List, donde T representa el tipo de elementos que contiene la lista.

List<Cheese> cheeseList = new List<Cheese>
{
    new Cheese(1, "Stilton", 3.0m, 5),
    new Cheese(2, "Cheddar", 2.25m, 3),
    new Cheese(3, "Pineapple", 3.5m, 1),
    new Cheese(4, "Brie", 5.5m, 2),
    new Cheese(5, "Roquefort", 3.5m, 5),
};
List<Cheese> cheeseList = new List<Cheese>
{
    new Cheese(1, "Stilton", 3.0m, 5),
    new Cheese(2, "Cheddar", 2.25m, 3),
    new Cheese(3, "Pineapple", 3.5m, 1),
    new Cheese(4, "Brie", 5.5m, 2),
    new Cheese(5, "Roquefort", 3.5m, 5),
};

En el ejemplo anterior, Layla crea un List<Cheese> utilizando la sintaxis del inicializador de colección para definir y poblar la lista con objetos Cheese. Especifica propiedades como ID, nombre, precio y potencia para cada objeto de queso que corresponde a la clase Cheese, demostrando la creación e inicialización de una lista en C#.

Iterar por la lista de quesos para imprimir el ID y el nombre

Layla Porter demuestra cómo usar un bucle foreach para iterar sobre el cheeseList e imprimir solo el ID y el Nombre de cada queso. A continuación se muestra el código junto con una explicación:

foreach (var cheese in cheeseList)
{
    Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}
foreach (var cheese in cheeseList)
{
    Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}

En el código anterior, Layla utiliza un bucle foreach para recorrer el cheeseList. Esto imprime todos los elementos de la lista. El bucle itera a través de cada objeto Cheese en la lista. En cada iteración, la variable cheese contiene el objeto Cheese actual en el índice especificado. Usando Console.WriteLine, imprime las propiedades ID y Name de cada elemento de cheese, mostrando cómo acceder y mostrar elementos específicos de una lista en C#.

Búsqueda de queso con LINQ Query

En el vídeo del minuto 2:45, Layla Porter muestra cómo buscar un queso específico a partir de la información introducida por el usuario mediante LINQ. Ella utiliza el método ReadLine para obtener el nombre del queso del usuario:

string cheeseName = Console.ReadLine();
string cheeseName = Console.ReadLine();

Mientras busca un elemento en la Lista, Layla destaca un punto clave muy importante en el minuto 2:51. Dice que, si no usáramos LINQ, tendríamos que recorrer manualmente cada queso de nuestra colección para encontrar un nombre que coincida con la entrada del usuario, pero las bibliotecas de ayuda de LINQ se encargan de esto entre bastidores, haciendo que el proceso sea muy eficiente. El siguiente fragmento de código demuestra cómo Layla (3:40) itera a través de los elementos de la lista sin utilizar un bucle for simplemente utilizando la sintaxis de consulta LINQ:

if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
    Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);

    Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
    Console.WriteLine("I'm sorry, we don't have that cheese.");
}
if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
    Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);

    Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
    Console.WriteLine("I'm sorry, we don't have that cheese.");
}

En el código anterior:

  • Layla explica que, en lugar de recorrer manualmente la lista, podemos utilizar LINQ para realizar una búsqueda más eficaz. El método Any verifica si algún queso en la lista coincide con el nombre ingresado por el usuario.

  • Si se encuentra una coincidencia significa que el elemento existe, el método FirstOrDefault recupera el primer queso que coincide con el nombre ingresado. Este método es seguro, ya que devuelve null si no se encuentra ninguna coincidencia, lo que evita posibles errores.

  • Si se encuentra el queso, se imprimen su nombre, precio y potencia. En caso contrario, aparecerá un mensaje indicando que no se encuentra.

Este enfoque muestra la eficacia y la sencillez del uso de LINQ para buscar colecciones en C#. El resultado del fragmento de código se muestra en 7:19: (¿Es posible una imagen mejor que la de abajo?)

Ejemplo de Salida

Manejo de la distinción entre mayúsculas y minúsculas durante la búsqueda

Cuando se trabaja con cadenas, Layla a las 8:00, recuerda que es importante recordar que son sensibles a mayúsculas y minúsculas. Para asegurar que nuestras comparaciones de nombres de queso no distingan entre mayúsculas y minúsculas, necesitamos convertir tanto la entrada del usuario como los nombres de queso de nuestra lista a minúsculas usando el método .ToLower(). Esto permite al usuario introducir cualquier tipo de mayúscula, y nuestro código seguirá encontrando correctamente el queso correspondiente. Recuerde que la distinción entre mayúsculas y minúsculas en las cadenas de caracteres puede ser molesta, por lo que es crucial manejarla adecuadamente.

Ejemplo práctico: Consulta de quesos por concentración

En el minuto (8:50), Layla crea un ejemplo práctico en el que el usuario puede filtrar quesos por su fuerza, demostrando cómo combinar la entrada del usuario con las consultas LINQ.

1. Entrada de usuario y lectura

Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();
Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();

Layla a las 9:05, comienza pidiendo al usuario que elija un valor de fuerza entre 1 y 5. Esto se hace con un simple Console.WriteLine solicitando entrada, seguido de Console.ReadLine() para capturar lo que digitan.

2. Convertir entrada en número entero

bool isInt = int.TryParse(strengthString, out int strength);
bool isInt = int.TryParse(strengthString, out int strength);

A continuación, en el minuto 9:16, se asegura de que la entrada es un número real. Ella recomienda usar int.TryParse para eso. Si la entrada se comprueba y se convierte correctamente en un número entero, ¡genial! Si no, bueno, podemos encargarnos de eso con elegancia.

3. Filtrado de quesos por graduación

List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();
List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();

Ahora viene la parte divertida en el video de Layla a las 10:25. Aquí, muestra cómo filtrar nuestra lista de quesos, es decir, cheeseList usando LINQ. Con el método Where de LINQ y una expresión lambda rápida (c => c.Strength == strength), ella extrae solo los quesos que coinciden con la fuerza elegida por el usuario. Esto nos da una nueva lista, cheeseByStrength.

4. Salida de quesos filtrados

foreach (var cheese in cheeseByStrength)
{
    Console.WriteLine($"Name: {cheese.Name} cheese");
}
foreach (var cheese in cheeseByStrength)
{
    Console.WriteLine($"Name: {cheese.Name} cheese");
}

Finalmente a las 12:03, para concluir todo de manera ordenada, Layla recorre cheeseByStrength con un bucle foreach. Para cada queso en esa lista, imprime su nombre usando el predicado especificado en Console.WriteLine. Sencillo y eficaz

Al ejecutar el programa en el minuto 12:17, Layla demuestra cómo el usuario introduce un valor de intensidad y la lista se filtra para mostrar solo los quesos con la intensidad especificada. A continuación se muestra un ejemplo: (¿Es posible una imagen mejor?)

Ejemplo de Salida

Conclusión

El vídeo de Layla introduce eficazmente el concepto de listas en C# y cómo consultarlas mediante LINQ. Siguiendo sus ejemplos y explicaciones, los principiantes pueden adquirir una base sólida para trabajar con listas y consultar datos en C#. Para más información y sesiones de programación en directo, visita el canal de Layla en YouTube y únete a sus retransmisiones en directo.

Recuerda explorar los varios métodos y propiedades de la clase List, tales como la propiedad Count, el método Insert, funciones predicado y más, para mejorar tu comprensión y habilidad para manipular listas efectivamente.

Hero Worlddot related to Lista de comprensión de C#
Hero Affiliate related to Lista de comprensión de C#

Gana más compartiendo lo que te gusta

¿Creas contenidos para desarrolladores que trabajan con .NET, C#, Java, Python o Node.js? ¡Convierte tu experiencia en un ingreso extra!

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame