Tanto la list‹T› como la ArrayList y otras clases de la Collections tienen propiedades muy similares a los arrays de C# (para más detalles sobre estos busquen nueva el tema Matrices y confirmen). Una ventaja fundamental de estas clases sobre los arrays es que puedan crecer y reducir el número de objetos almacenados.
La clase list‹T› esta contenida en System.Collections.Generic, mientras que la clase ArrayList figura en el System.Collections.
La sintaxis para crear una colección list‹T› es la siguiente:
List‹tipo› nombre = new List‹tipo›();
ArrayList es un objeto creado de una manera similar, aunque sin el argumento de tipo:
ArrayList nombre = new ArrayList ();
Con esta sintaxis ahora podemos crear una list‹T› denominada listacolores:
using System;
using System.Collections.Generic;
public class Lists
{
static void Main()
{
List‹string› listacolores = new List‹string›();
}
}
Añadir artículos a las listas
Una vez que una lista se ha creado hay una serie de métodos que pueden ser llamados a realizar tareas en la lista. En este caso para agrear elementos a la lista de objetos se utiliza el método Add(). Ejemplo:
List‹string› ListaColores = new List‹string›();
ListaColores.Add ("Azul");
ListaColores.Add ("Rojo");
ListaColores.Add ("Verde");
ListaColores.Add ("Amarillo");
ListaColores.Add ("Morado");
Acceso a los elementos
A los elementos individuales en una lista se puede acceder mediante el índice del valor de la partida (teniendo en cuenta que el primer punto del índice es 0, el segundo índice 1 y así sucesivamente). El valor del índice se encuentra entre corchetes tras el nombre de la lista. Por ejemplo, para acceder al segundo punto del objeto ListaColores:
Console.WriteLine (ListaColores[1]);
Un elemento de la lista puede cambiar su valor de manera similar usando el índice combinado con el operador de asignación. Por ejemplo, para cambiar el color de verde a mamey:
ListaColores[2] = "mamey";
Todos los elementos de una lista se puede acceder mediante un bucle foreach. Por ejemplo:
foreach (string color in ListaColores)
{
Console.WriteLine ( color );
}
Cuando compilado y ejecutado, el código de salida anterior mostrara todos los colores.
Inserción de artículos en una lista
Anteriormente se utilizó el método Add() para añadir elementos a una lista. El método Add(), sin embargo, sólo añade elementos al final de una lista. A veces es necesario añadir un nuevo tema en una ubicación específica en una lista. Insert() es el método para este fin específico. Insert() recibe dos argumentos, un entero que indica el índice de localización de la inserción y el tema que se incluirá en ese lugar. Por ejemplo, para insertar un elemento en la posición 2 de la lista seria:
ListaColores.Insert(2, "Blanco");
Ordenando Listas
No hay manera de decirle a C# que ordene automáticamente una lista de artículos despues de añadir. Si los elementos de una lista deben estar siempre ordenados se debe llamar al metodo Sort una vez se añaden nuevos elementos:
ListaColores.Sort();
Búsqueda de elementos en una lista
Se proveen un buen número de métodos con las clases listas y la ArrayList. El método más básico es el Contains(), en el cual cuando se pide a un objeto ArrayList o List devuelve true si el tema se encuentra en la lista, o false si no se encuentra.
El IndexOf() devuelve el valor de un índice de un elemento de la lista. Por ejemplo, el código siguiente muestra el valor de salida de 2, que es el índice de la posición de "Amarillo" en la cadena:
List‹string› ListaColores = new List‹string›();
ListaColores.Add ("Red");
ListaColores.Add ("Green");
ListaColores.Add ("Amarillo");
ListaColores.Add ("Morado");
ListaColores.Add ("Mamey");
Console.WriteLine(ListaColores.IndexOf("Amarillo"));
Si el elemento no se encuentra en la lista devuelve -1.
Esta técnica podría utilizarse para reemplazar un valor con otro. Por ejemplo, sin conocer de antemano el valor del índice del "Amarillo" cadena podemos cambiar a "Negro":
ListaColores[ListaColores.IndexOf("Amarillo")] = "Negro";
El LastIndexOf() método devuelve el valor del índice del último elemento de la lista para que coincida con el punto especificado. Esto es particularmente útil cuando la lista contiene elementos duplicados.
Obtener informacion de una lista
Hay dos miembros de la clase que son útiles para obtener información acerca de una lista de C # o colección de objetos ArrayList. La propiedad Capacity puede ser utilizada para identificar el número de artículos que puede almacenar una colección sin tener que cambiar el tamaño.
El propiedad Count, por otra parte, identifica cuantos artículos se encuentran actualmente almacenados en la lista. Por razones obvias, Capacity sera siempre superior a Count.
En los casos en que existe una gran diferencia entre el Count y Capacity los elementos pueden ser borrados con el método TrimExcess().
Borrado de elementos
Todos los elementos de una lista podrán ser borrados mediante el método Clear():
ListaColores.Clear();
Clear() elimina los elementos de la lista y establece la propiedad Count a cero. La propiedad Capacity, sin embargo, sigue siendo la misma. Para eliminar la Capacity despues de el método Clear() hay que llamar a TrimExcess().