// ===++=== // // OrtizOL // // ===--=== /*============================================================ // // Clase: Bolsa.cs // // Propósito: Demostración de una estructura de datos // genérica. // ============================================================*/ using System; using System.Collections.Generic; namespace Recetas.Cap02 { /// /// Representa una estructura de datos genérica para 'guardar' objetos. /// internal class Bolsa { // Lista contenedora de los elementos de la bolsa private List elementos = new List(); /// /// Agrega un elemento a la bolsa. /// ///Elemento a agregar a la bolsa public void Agregar(T elemento) { elementos.Add(elemento); } /// /// Extrae un elemento de la bolsa de forma aleatoria. /// ///Retorna el elemento extraído de la lista. public T Extraer() { T elemento = default(T); if (elementos.Count != 0) { // Aquí se determina el elemento a extraer de la bolsa // Esto se realiza de forma aleatoria: Random generadorAleatorio = new Random(); int numeroAleatorio = generadorAleatorio.Next(0, elementos.Count); // Extrae el elemento elemento = elementos[numeroAleatorio]; elementos.RemoveAt(numeroAleatorio); } return elemento; } /// /// Retorna un enumerador con los elementos de la bolsa. /// ///Objeto IEnumerator con los elementos. public IEnumerator GetEnumerator() { return elementos.GetEnumerator(); } /// /// Elimina todo el contenido de la bolsa /// ///Arreglo de tipo T con todos los elementos eliminados public T[] ExtraerTodo() { // Genera arreglo con todos los elementos de la bolsa: T[] contenido = elementos.ToArray(); // Se deshace de todos los elementos de la lista `elementos`: elementos.Clear(); return contenido; } } internal class PruebaBolsa { /// /// Punto de entrada a la aplicación. /// public static void Main() { // Aquí se crea la bolsa con objetos string: Bolsa bolsa = new Bolsa(); // Agregación de elementos (cadenas de caracteres) a la bolsa: bolsa.Agregar("DotNET"); bolsa.Agregar("Microsoft"); bolsa.Agregar("C#"); bolsa.Agregar("Language"); bolsa.Agregar("CLR"); bolsa.Agregar("Framework"); // Descrubre el contenido de la bolsa: Console.WriteLine("Contenido de la bolsa:"); foreach(string elemento in bolsa) { Console.WriteLine("\tElemento: {0}", elemento); } // Extracción de tres elementos de la bolsa: Console.WriteLine("\nExtracción de elementos:"); Console.WriteLine("\tElemento removido: {0}", bolsa.Extraer()); Console.WriteLine("\tElemento removido: {0}", bolsa.Extraer()); Console.WriteLine("\tElemento removido: {0}", bolsa.Extraer()); // Descrube el contenido actual de la bolsa: Console.WriteLine("\nContenido actual de la bolsa:"); foreach(string elemento in bolsa) { Console.WriteLine("\tElemento: {0}", elemento); } // Extracción de todo el contenido de la bolsa: Console.WriteLine("\nRemoviendo todos los elementos de la bolsa:"); string[] elementos = bolsa.ExtraerTodo(); // Descrube el contenido actual de la bolsa: Console.WriteLine("\nContenido actual de la bolsa:"); foreach(string elemento in bolsa) { Console.WriteLine("\tElemento: {0}", elemento); } } } }