// ===++===
//
// OrtizOL
//
// ===--===
/*============================================================
//
// Clase: Bolsa.cs
//
// Propósito: Demostración de una estructura de datos
// genérica.
//
============================================================*/
using System;
using System.Collections.Generic;
namespace Recetas.Cap02
{
///<summary>
/// Representa una estructura de datos genérica para 'guardar' objetos.
///</summary>
internal class Bolsa<T>
{
// Lista contenedora de los elementos de la bolsa
private List<T> elementos = new List<T>();
///<summary>
/// Agrega un elemento a la bolsa.
///</summary>
///<param value="elemento">Elemento a agregar a la bolsa</param>
public void Agregar(T elemento)
{
elementos.Add(elemento);
}
///<summary>
/// Extrae un elemento de la bolsa de forma aleatoria.
///</summary>
///<return>Retorna el elemento extraído de la lista.</return>
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;
}
///<summary>
/// Retorna un enumerador con los elementos de la bolsa.
///</summary>
///<return>Objeto IEnumerator con los elementos.</return>
public IEnumerator<T> GetEnumerator()
{
return elementos.GetEnumerator();
}
///<summary>
/// Elimina todo el contenido de la bolsa
///</summary>
///<return>Arreglo de tipo T con todos los elementos eliminados</return>
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
{
///<summary>
/// Punto de entrada a la aplicación.
///</summary>
public static void Main()
{
// Aquí se crea la bolsa con objetos string:
Bolsa<string> bolsa = new Bolsa<string>();
// 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);
}
}
}
}