Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


11.4. Las listas

Una lista es una estructura dinámica en la que se puede añadir elementos sin tantas restricciones. Es habitual que se puedan introducir nuevos datos en ambos extremos, así como entre dos elementos existentes, o bien incluso de forma ordenada, de modo que cada nuevo dato se introduzca automáticamente en la posición adecuada para que todos ellos queden en orden.

En el caso de C#, tenemos dos variantes especialmente útiles: una lista a cuyos elementos se puede acceder como a los de un array ("ArrayList") y una lista ordenada ("SortedList").

11.4.1. ArrayList

En un ArrayList, podemos añadir datos en la última posición con "Add", insertar en cualquier otra con "Insert", recuperar cualquier elemento usando corchetes, o incluso ordenar toda la lista con "Sort". Vamos a ver un ejemplo de la mayoría de sus posibilidades:

// Ejemplo_11_04_01a.cs
// Ejemplo de ArrayList
// Introducción a C#, por Nacho Cabanes

using System;
using System.Collections;

public class Ejemplo_11_04_01a  
{
    public static void Main()  
    {
        ArrayList miLista = new ArrayList();
        // Añadimos en orden
        miLista.Add("Hola,");
        miLista.Add("soy");
        miLista.Add("yo");

        // Mostramos lo que contiene
        Console.WriteLine( "Contenido actual:");
        foreach (string frase in miLista) 
            Console.WriteLine( frase );

        // Accedemos a una posición
        Console.WriteLine( "La segunda palabra es: {0}", 
            miLista[1] );

        // Insertamos en la segunda posicion
        miLista.Insert(1, "Como estas?");  

        // Mostramos de otra forma lo que contiene
        Console.WriteLine( "Contenido tras insertar:");
        for (int i=0; i= 0)
            Console.WriteLine( "Está en la posición {0}", posicion );
        else
            Console.WriteLine( "No está. El dato inmediatamente mayor "+
                "es el {0}: {1}", 
                ~posicion, miLista[~posicion] );
    }
}

El resultado de este programa es:

Contenido actual:
Hola,
soy
yo
La segunda palabra es: soy
Contenido tras insertar:
Hola,
Como estas?
soy
yo
La palabra "yo" está en la posición 3
Contenido tras ordenar
Como estas?
Hola,
soy
yo
Ahora "yo" está en la posición 3
Contenido dar la vuelta y tras eliminar dos:
Hola,
Como estas?
La frase "Hasta Luego"...
No está. El dato inmediatamente mayor es el 1: Hola,

Casi todo debería resultar fácil de entender, salvo quizá el símbolo ~. Esto se debe a que BinarySearch devuelve un número negativo cuando el texto que buscamos no aparece, pero ese número negativo tiene un significado: es el "valor complementario" de la posición del dato inmediatamente mayor (es decir, el dato cambiando los bits 0 por 1 y viceversa). En el ejemplo anterior, "posición" vale -2, lo que quiere decir que el dato no existe, y que el dato inmediatamente mayor está en la posición 1 (que es el "complemento a 2" del número -2, que es lo que indica la expresión "~posición"). En el apéndice 3 de este texto hablaremos de cómo se representan internamente los números enteros, tanto positivos como negativos, y entonces se verá con detalle en qué consiste el "complemento a 2".

A efectos prácticos, lo que nos interesa es que si quisiéramos insertar la frase "Hasta Luego", su posición correcta para que todo el ArrayList permaneciera ordenado sería la 1, que viene indicada por "~posicion".

Veremos los operadores a nivel de bits, como ~, en el tema 13, que estará dedicado a otras características avanzadas de C#.

Ejercicios propuestos:

Ejercicio propuesto 11.4.1.1: Crea un programa que lea el contenido de un fichero de texto, lo almacene línea por línea en un ArrayList, y luego pregunte de forma repetitiva al usuario qué línea desea ver. Terminará cuando el usuario introduzca "-1".
Ejercicio propuesto 11.4.1.2: Crea un programa que lea el contenido de un fichero de texto, lo almacene línea por línea en un ArrayList, y luego pregunte de forma repetitiva al usuario qué texto desea buscar y muestre las líneas que contienen ese texto. Terminará cuando el usuario introduzca una cadena vacía.
Ejercicio propuesto 11.4.1.3: Crea un programa que lea el contenido de un fichero de texto, lo almacene línea por línea en un ArrayList, lo ordene y lo muestre ordenado en pantalla.
Ejercicio propuesto 11.4.1.4: Crea un programa que lea el contenido de un fichero de texto, lo almacene línea por línea en un ArrayList, luego muestre en pantalla las líneas impares (primera, tercera, etc.) y finalmente vuelque a otro fichero de texto las líneas pares (segunda, cuarta, etc.).
Ejercicio propuesto 11.4.1.5: Crea una nueva versión de la "bases de datos de ficheros" (ejemplo 04_06a), pero usando ArrayList en vez de un array convencional.