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