// ===++===
//
// OrtizOL
//
// ===--===
/*============================================================
//
// Clase: Fruta.cs
//
// Propósito: Demostración de la implementación de la
// interfaz IEqualityComparer para remoción de elementos de
// datos duplicados.
//
============================================================*/
using System;
using System.Collections.Generic;
using System.Linq;
namespace Recetas.Cap02
{
internal class Fruta
{
public Fruta(string nombre, string color)
{
Nombre = nombre;
Color = color;
}
public string Nombre
{
get;
set;
}
public string Color
{
get;
set;
}
}
///<summary>
/// Clase que compara objetos de la clase Fruta.
/// Implementa la interfaz genérica IEqualityComparer.
///<summary>
internal class ComparadorFruta : IEqualityComparer<Fruta>
{
public bool Equals(Fruta f1, Fruta f2)
{
return f1.Nombre == f2.Nombre && f1.Color == f2.Color;
}
public int GetHashCode(Fruta fruta)
{
return fruta.Nombre.GetHashCode() + fruta.Nombre.GetHashCode();
}
}
internal class DemoFruta
{
public static void Main()
{
// Lista con duplicados de fruta:
List<Fruta> frutas = new List<Fruta>()
{
new Fruta("manzana", "verde"),
new Fruta("pera", "verde"),
new Fruta("mora", "rojo"),
new Fruta("tomate", "rojo"),
new Fruta("cereza", "rojo"),
new Fruta("mango", "amarillo"),
new Fruta("pera", "verde"),
new Fruta("banano", "amarillo"),
new Fruta("naranja", "naranaja"),
new Fruta("tomate", "rojo"),
new Fruta("melón", "amarillo"),
new Fruta("manzana", "verde"),
new Fruta("mango", "amarillo")
};
// Recurrimos al uso del método Distinct de la lista:
Console.WriteLine("\nLista de frutas sin duplicados:");
foreach(Fruta fruta in frutas.Distinct(new ComparadorFruta()))
{
Console.WriteLine("Fruta: {0} - {1}", fruta.Nombre, fruta.Color);
}
}
}
}
Ly8gPT09Kys9PT0KLy8KLy8JT3J0aXpPTAovLwovLyA9PT0tLT09PQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLwovLyBDbGFzZTogRnJ1dGEuY3MKLy8KLy8gUHJvcMOzc2l0bzogRGVtb3N0cmFjacOzbiBkZSBsYSBpbXBsZW1lbnRhY2nDs24gZGUgbGEgCi8vIGludGVyZmF6IElFcXVhbGl0eUNvbXBhcmVyIHBhcmEgcmVtb2Npw7NuIGRlIGVsZW1lbnRvcyBkZSAKLy8gZGF0b3MgZHVwbGljYWRvcy4KLy8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCnVzaW5nIFN5c3RlbTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CnVzaW5nIFN5c3RlbS5MaW5xOwoKbmFtZXNwYWNlIFJlY2V0YXMuQ2FwMDIKewoJaW50ZXJuYWwgY2xhc3MgRnJ1dGEKCXsKCQlwdWJsaWMgRnJ1dGEoc3RyaW5nIG5vbWJyZSwgc3RyaW5nIGNvbG9yKQoJCXsKCQkJTm9tYnJlID0gbm9tYnJlOwoJCQlDb2xvciA9IGNvbG9yOwoJCX0KCQkKCQlwdWJsaWMgc3RyaW5nIE5vbWJyZQoJCXsKCQkJZ2V0OwoJCQlzZXQ7CgkJfQoJCQoJCXB1YmxpYyBzdHJpbmcgQ29sb3IKCQl7CgkJCWdldDsKCQkJc2V0OwoJCX0KCX0KCQoJLy8vPHN1bW1hcnk+CgkvLy8gQ2xhc2UgcXVlIGNvbXBhcmEgb2JqZXRvcyBkZSBsYSBjbGFzZSBGcnV0YS4KCS8vLyBJbXBsZW1lbnRhIGxhIGludGVyZmF6IGdlbsOpcmljYSBJRXF1YWxpdHlDb21wYXJlci4KCS8vLzxzdW1tYXJ5PgoJaW50ZXJuYWwgY2xhc3MgQ29tcGFyYWRvckZydXRhIDogSUVxdWFsaXR5Q29tcGFyZXI8RnJ1dGE+Cgl7CgkJcHVibGljIGJvb2wgRXF1YWxzKEZydXRhIGYxLCBGcnV0YSBmMikKCQl7CgkJCXJldHVybiBmMS5Ob21icmUgPT0gZjIuTm9tYnJlICYmIGYxLkNvbG9yID09IGYyLkNvbG9yOwoJCX0KCQkKCQlwdWJsaWMgaW50IEdldEhhc2hDb2RlKEZydXRhIGZydXRhKQoJCXsKCQkJcmV0dXJuIGZydXRhLk5vbWJyZS5HZXRIYXNoQ29kZSgpICsgZnJ1dGEuTm9tYnJlLkdldEhhc2hDb2RlKCk7CgkJfQoJfQoKCWludGVybmFsIGNsYXNzIERlbW9GcnV0YQoJewoJCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCQl7CgkJCS8vIExpc3RhIGNvbiBkdXBsaWNhZG9zIGRlIGZydXRhOgoJCQlMaXN0PEZydXRhPiBmcnV0YXMgPSBuZXcgTGlzdDxGcnV0YT4oKQoJCQl7CgkJCQluZXcgRnJ1dGEoIm1hbnphbmEiLCAidmVyZGUiKSwKCQkJCW5ldyBGcnV0YSgicGVyYSIsICJ2ZXJkZSIpLAoJCQkJbmV3IEZydXRhKCJtb3JhIiwgInJvam8iKSwKCQkJCW5ldyBGcnV0YSgidG9tYXRlIiwgInJvam8iKSwKCQkJCW5ldyBGcnV0YSgiY2VyZXphIiwgInJvam8iKSwKCQkJCW5ldyBGcnV0YSgibWFuZ28iLCAiYW1hcmlsbG8iKSwKCQkJCW5ldyBGcnV0YSgicGVyYSIsICJ2ZXJkZSIpLAoJCQkJbmV3IEZydXRhKCJiYW5hbm8iLCAiYW1hcmlsbG8iKSwKCQkJCW5ldyBGcnV0YSgibmFyYW5qYSIsICJuYXJhbmFqYSIpLAoJCQkJbmV3IEZydXRhKCJ0b21hdGUiLCAicm9qbyIpLAoJCQkJbmV3IEZydXRhKCJtZWzDs24iLCAiYW1hcmlsbG8iKSwKCQkJCW5ldyBGcnV0YSgibWFuemFuYSIsICJ2ZXJkZSIpLAoJCQkJbmV3IEZydXRhKCJtYW5nbyIsICJhbWFyaWxsbyIpCgkJCX07CgkJCQoJCQkvLyBSZWN1cnJpbW9zIGFsIHVzbyBkZWwgbcOpdG9kbyBEaXN0aW5jdCBkZSBsYSBsaXN0YToKCQkJQ29uc29sZS5Xcml0ZUxpbmUoIlxuTGlzdGEgZGUgZnJ1dGFzIHNpbiBkdXBsaWNhZG9zOiIpOwoJCQlmb3JlYWNoKEZydXRhIGZydXRhIGluIGZydXRhcy5EaXN0aW5jdChuZXcgQ29tcGFyYWRvckZydXRhKCkpKQoJCQl7CgkJCQlDb25zb2xlLldyaXRlTGluZSgiRnJ1dGE6IHswfSAtIHsxfSIsIGZydXRhLk5vbWJyZSwgZnJ1dGEuQ29sb3IpOwoJCQl9CgkJfQoJfQp9