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.6. Los enumeradores

Un enumerador es una estructura auxiliar que permite recorrer las estructuras dinámicas de forma secuencial. Casi todas ellas contienen un método GetEnumerator, que permite obtener un enumerador para recorrer todos sus elementos. Por ejemplo, en una tabla hash, para la que no podríamos aplicar un "for" para obtener los datos uno por uno, sí podríamos hacer:

// Ejemplo_11_06a.cs
// Ejemplo de Enumeradores en una Tabla Hash
// Introducción a C#, por Nacho Cabanes

using System;
using System.Collections;

public class Ejemplo_11_06a
{
    public static void Main()  
    {
        // Creamos e insertamos datos
        Hashtable miDiccio = new Hashtable();
        miDiccio.Add("byte", "8 bits");
        miDiccio.Add("pc", "personal computer");
        miDiccio.Add("kilobyte", "1024 bytes");

        // Mostramos todos los datos
        Console.WriteLine("Contenido:");
        IDictionaryEnumerator miEnumerador = miDiccio.GetEnumerator();
        while ( miEnumerador.MoveNext() )
            Console.WriteLine("{0} = {1}", 
                miEnumerador.Key, miEnumerador.Value);
    }
}

cuyo resultado es

Contenido:
pc = personal computer
byte = 8 bits
kilobyte = 1024 bytes

Como se puede ver, los enumeradores tendrán un método "MoveNext", que intenta moverse al siguiente elemento y devuelve "false" si no lo consigue. En el caso de las tablas hash, que tiene dos campos (clave y valor), el enumerador a usar será un "enumerador de diccionario" (IDictionaryEnumerator), que contiene los campos Key y Value.

Como se ve en el ejemplo, es habitual que no obtengamos la lista de elementos en el mismo orden en el que los introdujimos, debido a que se colocan siguiendo la función de dispersión.

Para las colecciones "normales", como las pilas y las colas, el tipo de Enumerador a usar será un IEnumerator, con un campo Current para saber el valor actual:

// Ejemplo_11_06b.cs
// Ejemplo de Enumeradores en una pila (Stack)
// Introducción a C#, por Nacho Cabanes

using System;
using System.Collections;

public class Ejemplo_11_06b
{
    public static void Main()  
    {
        Stack miPila = new Stack();
        miPila.Push("Hola,");
        miPila.Push("soy");
        miPila.Push("yo");

        // Mostramos todos los datos
        Console.WriteLine("Contenido:");
        IEnumerator miEnumerador = miPila.GetEnumerator();
        while ( miEnumerador.MoveNext() )
            Console.WriteLine("{0}", miEnumerador.Current);
    }
}

que escribiría

Contenido:
yo
soy
Hola,

Nota: los "enumeradores" existen también en otras plataformas, como Java, aunque allí reciben el nombre de "iteradores".

Se puede saber más sobre las estructuras dinámicas que hay disponibles en la plataforma .Net consultando la referencia en línea de MSDN (mucha de la cual está sin traducir al español):

http://msdn.microsoft.com/es-es/library/system.collections(en-us,VS.71).aspx

Ejercicios propuestos:

Ejercicio propuesto 11.6.1: Crea un programa que, a partir de la SortedList del ejercicio 11.4.2.1, muestre todo su contenido usando un enumerador.
Ejercicio propuesto 11.6.2: A partir del ejercicio 11.3.1, crea un programa que pida al usuario 5 números reales de doble precisión, los guarde en una cola y luego los muestre en pantalla usando un enumerador.