Existen datos simples y complejos, y por ello hay que tratarlos de diferente manera.
Simples
Si queremos trabajar con los tipos de datos primitivos como el double, int, long, decimal y string no hay que hacer mucho esfuerzo. int[] numeros = new int[] { 1, 1, 2, 3, 8, 8, 9 };
foreach (var numero in numeros)
Console.Write(numero);
Console.WriteLine();
foreach (var numero in numeros.Distinct())
Console.Write(numero);
Console.WriteLine();
var numerosSinRepetir = new List<int>();
foreach (var numero in numeros)
if (!numerosSinRepetir.Contains(numero))
numerosSinRepetir.Add(numero);
foreach (var numero in numerosSinRepetir)
Console.Write(numero);
Console.WriteLine();
Console.WriteLine();
Complejos
Si queremos trabajar con clases o estructuras tenemos que implementar la interfaz IEqualityComparer<T> correctamente.
public class DatoComplejo
{
public int Codigo { get; set; }
public DatoComplejo(int codigo)
{
this.Codigo = codigo;
}
public override string ToString()
{
return string.Format("Código: {0}", this.Codigo);
}
}
public class DatoComplejoEqualityComparer : IEqualityComparer<DatoComplejo>
{
public bool Equals(DatoComplejo x, DatoComplejo y)
{
return x.Codigo == y.Codigo;
}
public int GetHashCode(DatoComplejo obj)
{
return obj.Codigo.GetHashCode();
}
}
DatoComplejo[] datosComplejos = new DatoComplejo[]
{
new DatoComplejo(1),
new DatoComplejo(1),
new DatoComplejo(2),
new DatoComplejo(3),
new DatoComplejo(8),
new DatoComplejo(8),
new DatoComplejo(9)
};
foreach (var datoComplejo in datosComplejos)
Console.Write(datoComplejo + ". ");
Console.WriteLine();
foreach (var datoComplejo in datosComplejos.Distinct())
Console.Write(datoComplejo + ". ");
Console.WriteLine();
foreach (var datoComplejo in datosComplejos.Distinct(new DatoComplejoEqualityComparer()))
Console.Write(datoComplejo + ". ");
Console.WriteLine();
var datosComplejosSinRepetir = new List<DatoComplejo>();
foreach (var datoComplejo in datosComplejos)
if (!datosComplejosSinRepetir.Contains(datoComplejo, new DatoComplejoEqualityComparer()))
datosComplejosSinRepetir.Add(datoComplejo);
foreach (var datoComplejo in datosComplejosSinRepetir)
Console.Write(datoComplejo + ". ");
Console.WriteLine();
Console.WriteLine();

No hay comentarios.:
Publicar un comentario