fork download
  1. // ===++===
  2. //
  3. // OrtizOL
  4. //
  5. // ===--===
  6. /*============================================================
  7. //
  8. // Clase: Bolsa.cs
  9. //
  10. // Propósito: Demostración de una estructura de datos
  11. // genérica.
  12. //
  13. ============================================================*/
  14.  
  15. using System;
  16. using System.Collections.Generic;
  17.  
  18. namespace Recetas.Cap02
  19. {
  20. ///<summary>
  21. /// Representa una estructura de datos genérica para 'guardar' objetos.
  22. ///</summary>
  23. internal class Bolsa<T>
  24. {
  25. // Lista contenedora de los elementos de la bolsa
  26. private List<T> elementos = new List<T>();
  27.  
  28. ///<summary>
  29. /// Agrega un elemento a la bolsa.
  30. ///</summary>
  31. ///<param value="elemento">Elemento a agregar a la bolsa</param>
  32. public void Agregar(T elemento)
  33. {
  34. elementos.Add(elemento);
  35. }
  36.  
  37. ///<summary>
  38. /// Extrae un elemento de la bolsa de forma aleatoria.
  39. ///</summary>
  40. ///<return>Retorna el elemento extraído de la lista.</return>
  41. public T Extraer()
  42. {
  43. T elemento = default(T);
  44.  
  45. if (elementos.Count != 0)
  46. {
  47. // Aquí se determina el elemento a extraer de la bolsa
  48. // Esto se realiza de forma aleatoria:
  49. Random generadorAleatorio = new Random();
  50.  
  51. int numeroAleatorio = generadorAleatorio.Next(0, elementos.Count);
  52.  
  53. // Extrae el elemento
  54. elemento = elementos[numeroAleatorio];
  55. elementos.RemoveAt(numeroAleatorio);
  56. }
  57.  
  58. return elemento;
  59. }
  60.  
  61. ///<summary>
  62. /// Retorna un enumerador con los elementos de la bolsa.
  63. ///</summary>
  64. ///<return>Objeto IEnumerator con los elementos.</return>
  65. public IEnumerator<T> GetEnumerator()
  66. {
  67. return elementos.GetEnumerator();
  68. }
  69.  
  70. ///<summary>
  71. /// Elimina todo el contenido de la bolsa
  72. ///</summary>
  73. ///<return>Arreglo de tipo T con todos los elementos eliminados</return>
  74. public T[] ExtraerTodo()
  75. {
  76. // Genera arreglo con todos los elementos de la bolsa:
  77. T[] contenido = elementos.ToArray();
  78.  
  79. // Se deshace de todos los elementos de la lista `elementos`:
  80. elementos.Clear();
  81.  
  82. return contenido;
  83. }
  84. }
  85.  
  86. internal class PruebaBolsa
  87. {
  88. ///<summary>
  89. /// Punto de entrada a la aplicación.
  90. ///</summary>
  91. public static void Main()
  92. {
  93. // Aquí se crea la bolsa con objetos string:
  94. Bolsa<string> bolsa = new Bolsa<string>();
  95.  
  96. // Agregación de elementos (cadenas de caracteres) a la bolsa:
  97. bolsa.Agregar("DotNET");
  98. bolsa.Agregar("Microsoft");
  99. bolsa.Agregar("C#");
  100. bolsa.Agregar("Language");
  101. bolsa.Agregar("CLR");
  102. bolsa.Agregar("Framework");
  103.  
  104. // Descrubre el contenido de la bolsa:
  105. Console.WriteLine("Contenido de la bolsa:");
  106. foreach(string elemento in bolsa)
  107. {
  108. Console.WriteLine("\tElemento: {0}", elemento);
  109. }
  110.  
  111. // Extracción de tres elementos de la bolsa:
  112. Console.WriteLine("\nExtracción de elementos:");
  113. Console.WriteLine("\tElemento removido: {0}", bolsa.Extraer());
  114. Console.WriteLine("\tElemento removido: {0}", bolsa.Extraer());
  115. Console.WriteLine("\tElemento removido: {0}", bolsa.Extraer());
  116.  
  117. // Descrube el contenido actual de la bolsa:
  118. Console.WriteLine("\nContenido actual de la bolsa:");
  119. foreach(string elemento in bolsa)
  120. {
  121. Console.WriteLine("\tElemento: {0}", elemento);
  122. }
  123.  
  124. // Extracción de todo el contenido de la bolsa:
  125. Console.WriteLine("\nRemoviendo todos los elementos de la bolsa:");
  126. string[] elementos = bolsa.ExtraerTodo();
  127.  
  128. // Descrube el contenido actual de la bolsa:
  129. Console.WriteLine("\nContenido actual de la bolsa:");
  130. foreach(string elemento in bolsa)
  131. {
  132. Console.WriteLine("\tElemento: {0}", elemento);
  133. }
  134. }
  135. }
  136. }
Success #stdin #stdout 0.03s 33888KB
stdin
Standard input is empty
stdout
Contenido de la bolsa:
	Elemento: DotNET
	Elemento: Microsoft
	Elemento: C#
	Elemento: Language
	Elemento: CLR
	Elemento: Framework

Extracción de elementos:
	Elemento removido: Framework
	Elemento removido: Microsoft
	Elemento removido: C#

Contenido actual de la bolsa:
	Elemento: DotNET
	Elemento: Language
	Elemento: CLR

Removiendo todos los elementos de la bolsa:

Contenido actual de la bolsa: