csharp-que-son-listas

Qué son y cómo usar las listas en C#

Una Lista es una colección genérica que implementa un array con tamaño dinámico. Es una de las estructuras de datos que usaréis con más frecuencia utilizadas.

A diferencia de los arrays, las listas permiten la manipulación dinámica de sus elementos (es decir, que podemos añadir y eliminar elementos, definir un tamaño fijo al inicio).

La clase List<T> en el espacio de nombres System.Collections.Generic permite crear listas de cualquier tipo especificado por el parámetro de tipo T.

Declaración de listas

Para declarar una lista en C#, se utiliza la siguiente sintaxis:

List<tipo> nombreLista;

Por ejemplo, para declarar una lista de enteros:

List<int> numeros;

Creación de la lista

Una vez declarada la lista, antes de poder usarla debemos inicializarla. Para ello debemos crear una nueva Lista, y asignarla a la variable que hemos declarado anteriormente.

O, alternativamente, podemos hacerlo en el mismo momento en que declaramos nuestra Lista. Asi:

List<int> numeros = new List<int>();

// equivalente
var numeros = new List<int>();
List<int> numeros = new ();

Inicialización de listas

Alternativamente, queremos inicializar la lista a una serie de valores conocidos en tiempo de compilación, podemos hacerlo usando el inicializador semántico [].

// sintaxis recomendada
List<int> numeros = [ 1, 2, 3, 4, 5 ];

// equivalente a esto
List<int> numeros = new () { 1, 2, 3, 4, 5 };
List<int> numeros = new List<int>() { 1, 2, 3, 4, 5 };

Anteriormente había otras formas

Uso básico de lista

Acceder a elementos de una lista

Los elementos de una lista se pueden acceder mediante índices, comenzando desde 0:

List<int> numeros = new List<int>();

int primerNumero = numeros[0]; // primerNumero será 1

Modificar elementos de una lista

Los elementos de una lista se pueden modificar asignando nuevos valores a los índices específicos:

numeros[1] = 20; // El segundo elemento de la lista ahora será 20

Añadir elementos a una lista

Para añadir elementos a una lista, se utiliza el método Add:

numeros.Add(1);

Además, podemos agregar múltiples elementos a la vez utilizando el método AddRange():

lista.AddRange(coleccion);

Donde coleccion representa una colección de elementos del mismo tipo que la lista.

Eliminar elementos de una lista

Para eliminar un elemento de una lista, podemos utilizar el método Remove():

numeros.Remove(20); // Elimina el primer elemento con el valor 20

También es posible eliminar un elemento en función de su índice utilizando el método RemoveAt():

numeros.RemoveAt(0); // Elimina el primer elemento

Limpiar toda la lista

numeros.Clear(); // Elimina todos los elementos de la lista

Insertar elementos en una posición específica

Para insertar un elemento en una posición específica de la lista, se utiliza el método Insert:

numeros.Insert(1, 15); // Inserta el número 15 en la posición 1

Propiedades y métodos útiles de List<T>

Las listas en C# ofrecen una amplia gama de operaciones que nos permiten manipular y acceder a sus elementos de manera eficiente. Vamos a ver algunas de ellas:

Propiedad Count

La propiedad Count devuelve el número de elementos en la lista:

int cantidad = numeros.Count; // cantidad será el número de elementos en la lista

Método Contains

El método Contains verifica si un valor específico está presente en la lista:

bool contiene = numeros.Contains(3); // contiene será true si el número 3 está en la lista

Método IndexOf

El método IndexOf devuelve el índice de la primera aparición de un valor específico en la lista:

int indice = numeros.IndexOf(3); // indice será la posición del número 3 en la lista

Método Sort

El método Sort ordena los elementos de la lista:

numeros.Sort(); // Ordena los elementos en orden ascendente

Método Reverse

El método Reverse invierte el orden de los elementos en la lista:

numeros.Reverse(); // Invierte el orden de los elementos en la lista

Ejemplos prácticos

Calcular la suma de los elementos de una lista

En este ejemplo, se utiliza un bucle foreach para calcular la suma de los elementos en una lista.

List<int> numeros = new List<int> { 1, 2, 3, 4, 5 }; // Declaramos la lista con los números
int suma = 0; // Variable para almacenar la suma de los elementos

foreach (int numero in numeros)
{
    suma += numero; // Suma cada elemento de la lista a 'suma'
}

Console.WriteLine($"La suma de los elementos es: {suma}");

Filtrar elementos de una lista

En este ejemplo, se utiliza el método FindAll para filtrar los elementos pares de una lista.

List<int> numeros = new List<int> { 1, 2, 3, 4, 5 }; // Declaramos la lista con los números
List<int> numerosPares = numeros.FindAll(numero => numero % 2 == 0); // Filtra los números pares

Console.WriteLine("Números pares:");
foreach (int numero in numerosPares)
{
    Console.WriteLine(numero); // Imprime cada número par
}

Encontrar el valor máximo en una lista

En este ejemplo, se utiliza el método Max para encontrar el valor máximo en una lista.

List<int> numeros = new List<int> { 1, 2, 3, 4, 5 }; // Declaramos la lista con los números
int maximo = numeros.Max(); // Encuentra el valor máximo

Console.WriteLine($"El valor máximo es: {maximo}");

Ordenar los elementos de una lista

En este ejemplo, se utiliza el método Sort para ordenar los elementos de una lista en orden ascendente.

List<int> numeros = new List<int> { 5, 3, 1, 4, 2 }; // Declaramos la lista con los números desordenados
numeros.Sort(); // Ordena la lista en orden ascendente

Console.WriteLine("Números ordenados:");
foreach (int numero in numeros)
{
    Console.WriteLine(numero); // Imprime cada número en orden
}

Contar cuántos elementos cumplen una condición

En este ejemplo, se utiliza el método Count para contar cuántos elementos en una lista son mayores que un valor específico.

List<int> numeros = new List<int> { 1, 2, 3, 4, 5 }; // Declaramos la lista con los números
int contador = numeros.Count(numero => numero > 3); // Cuenta los elementos mayores que 3

Console.WriteLine($"Hay {contador} elementos mayores que 3");

Eliminar elementos de una lista

En este ejemplo, se utiliza el método RemoveAll para eliminar todos los elementos impares de una lista.

List<int> numeros = new List<int> { 1, 2, 3, 4, 5 }; // Declaramos la lista con los números
numeros.RemoveAll(numero => numero % 2 != 0); // Elimina todos los números impares

Console.WriteLine("Números restantes:");
foreach (int numero in numeros)
{
    Console.WriteLine(numero); // Imprime los números restantes
}