fork download
  1. // ===++===
  2. //
  3. // OrtizOL
  4. //
  5. // ===--===
  6. /*============================================================
  7. //
  8. // Clase: Fruta.cs
  9. //
  10. // Propósito: Demostración de la implementación de la
  11. // interfaz IEqualityComparer para remoción de elementos de
  12. // datos duplicados.
  13. //
  14. ============================================================*/
  15.  
  16. using System;
  17. using System.Collections.Generic;
  18. using System.Linq;
  19.  
  20. namespace Recetas.Cap02
  21. {
  22. internal class Fruta
  23. {
  24. public Fruta(string nombre, string color)
  25. {
  26. Nombre = nombre;
  27. Color = color;
  28. }
  29.  
  30. public string Nombre
  31. {
  32. get;
  33. set;
  34. }
  35.  
  36. public string Color
  37. {
  38. get;
  39. set;
  40. }
  41. }
  42.  
  43. ///<summary>
  44. /// Clase que compara objetos de la clase Fruta.
  45. /// Implementa la interfaz genérica IEqualityComparer.
  46. ///<summary>
  47. internal class ComparadorFruta : IEqualityComparer<Fruta>
  48. {
  49. public bool Equals(Fruta f1, Fruta f2)
  50. {
  51. return f1.Nombre == f2.Nombre && f1.Color == f2.Color;
  52. }
  53.  
  54. public int GetHashCode(Fruta fruta)
  55. {
  56. return fruta.Nombre.GetHashCode() + fruta.Nombre.GetHashCode();
  57. }
  58. }
  59.  
  60. internal class DemoFruta
  61. {
  62. public static void Main()
  63. {
  64. // Lista con duplicados de fruta:
  65. List<Fruta> frutas = new List<Fruta>()
  66. {
  67. new Fruta("manzana", "verde"),
  68. new Fruta("pera", "verde"),
  69. new Fruta("mora", "rojo"),
  70. new Fruta("tomate", "rojo"),
  71. new Fruta("cereza", "rojo"),
  72. new Fruta("mango", "amarillo"),
  73. new Fruta("pera", "verde"),
  74. new Fruta("banano", "amarillo"),
  75. new Fruta("naranja", "naranaja"),
  76. new Fruta("tomate", "rojo"),
  77. new Fruta("melón", "amarillo"),
  78. new Fruta("manzana", "verde"),
  79. new Fruta("mango", "amarillo")
  80. };
  81.  
  82. // Recurrimos al uso del método Distinct de la lista:
  83. Console.WriteLine("\nLista de frutas sin duplicados:");
  84. foreach(Fruta fruta in frutas.Distinct(new ComparadorFruta()))
  85. {
  86. Console.WriteLine("Fruta: {0} - {1}", fruta.Nombre, fruta.Color);
  87. }
  88. }
  89. }
  90. }
Success #stdin #stdout 0.03s 33944KB
stdin
Standard input is empty
stdout
Lista de frutas sin duplicados:
Fruta: manzana - verde
Fruta: pera - verde
Fruta: mora - rojo
Fruta: tomate - rojo
Fruta: cereza - rojo
Fruta: mango - amarillo
Fruta: banano - amarillo
Fruta: naranja - naranaja
Fruta: melón - amarillo