8.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 podríamos hacer:
/*---------------------------*/ /* Ejemplo en C# */ /* HashTable3.cs */ /* */ /* Ejemplo de HashTable */ /* y enumerador */ /* */ /* Introduccion a C#, */ /* Nacho Cabanes */ /*---------------------------*/ using System; using System.Collections; public class ejemploHashTable3 { 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 en C# */ /* pila2.cs */ /* */ /* Ejemplo de clase "Stack" */ /* y enumerador */ /* */ /* Introduccion a C#, */ /* Nacho Cabanes */ /*---------------------------*/ using System; using System.Collections; public class ejemploPila1 { 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#