El método Distinct() de LINQ

El método Distinct() de LINQ

LINQ es una herramienta extremadamente útil para trabajar con colecciones de datos en C#. Una de las características más útiles de LINQ es el método Distinct(), que nos permite eliminar elementos duplicados de una colección. En este artículo, explicaremos en detalle cómo funciona el método Distinct() y cómo podemos utilizarlo en nuestro código.

📋 Aquí podrás encontrar✍
  1. ¿Qué es el método Distinct()?
  2. Cómo funciona el método Distinct()
  3. Ejemplos de uso del método Distinct()
    1. Ejemplo 1: Eliminar duplicados de una lista de cadenas
    2. Ejemplo 2: Eliminar duplicados de una lista de objetos personalizados
  4. Conclusión
  5. Preguntas frecuentes
    1. ¿Cómo puedo proporcionar mi propia implementación de igualdad para el método Distinct()?
    2. ¿Cómo puedo ordenar una lista después de eliminar los duplicados con el método Distinct()?

¿Qué es el método Distinct()?

El método Distinct() es un método de extensión proporcionado por el espacio de nombres System.Linq que se utiliza para eliminar elementos duplicados de una colección. En otras palabras, si tenemos una colección de elementos y algunos de ellos se repiten, podemos utilizar Distinct() para eliminar los duplicados y obtener una lista de elementos únicos.

La sintaxis del método Distinct() es muy sencilla. Simplemente llamamos al método en una colección y nos devuelve una nueva colección con los elementos duplicados eliminados:


var lista = new List { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4 };
var listaUnica = lista.Distinct();

En este ejemplo, la listaUnica contendría los valores 1, 2, 3 y 4, ya que los valores duplicados han sido eliminados.

Cómo funciona el método Distinct()

El método Distinct() funciona comparando los elementos de la colección utilizando sus valores de hash y su implementación de igualdad. Por defecto, utiliza la implementación de igualdad predeterminada para el tipo de elemento de la colección, pero también podemos proporcionarle una implementación personalizada si es necesario.

El método Distinct() crea internamente un conjunto hash que mantiene un registro de cada elemento único de la colección. A medida que recorre los elementos de la colección, comprueba si el elemento ya está en el conjunto hash, y si es así, lo omite. De esta manera, el conjunto hash siempre mantiene una lista de elementos únicos, y cuando el método Distinct() termina de recorrer la colección original, devuelve esta lista al usuario.

Ejemplos de uso del método Distinct()

Veamos algunos ejemplos de cómo podemos utilizar el método Distinct() en nuestro código.

Ejemplo 1: Eliminar duplicados de una lista de cadenas

Supongamos que tenemos una lista de cadenas que contiene algunos valores duplicados. Podemos utilizar el método Distinct() para eliminar los duplicados y obtener una lista de cadenas únicas. Aquí está el código:


var lista = new List { "manzana", "naranja", "naranja", "pera", "manzana" };
var listaUnica = lista.Distinct();

En este ejemplo, la listaUnica contendría los valores "manzana", "naranja" y "pera", ya que los valores duplicados han sido eliminados.

Ejemplo 2: Eliminar duplicados de una lista de objetos personalizados

Supongamos que tenemos una lista de objetos personalizados con una propiedad única llamada "Id". Podemos utilizar el método Distinct() para eliminar los objetos duplicados basándonos en su propiedad "Id". Aquí está el código:


public class Persona
{
public int Id { get; set; }
public string Nombre { get; set; }
}

var lista = new List
{
new Persona { Id = 1, Nombre = "Juan" },
new Persona { Id = 2, Nombre = "Maria" },
new Persona { Id = 2, Nombre = "Pedro" },
new Persona { Id = 3, Nombre = "Laura" },
new Persona { Id = 3, Nombre = "Sofia" },
new Persona { Id = 3, Nombre = "Ana" }
};

var listaUnica = lista.DistinctBy(p => p.Id);

En este ejemplo, la listaUnica contendría los objetos Person con Id igual a 1, 2 y 3, ya que los objetos duplicados han sido eliminados.

Conclusión

El método Distinct() de LINQ es una herramienta muy útil para eliminar elementos duplicados de una colección en C#. Ya sea que estemos trabajando con una lista de cadenas o una lista de objetos personalizados, el método Distinct() puede ayudarnos a reducir la complejidad de nuestro código y hacer que sea más fácil leer y mantener.

Preguntas frecuentes

¿Cómo puedo proporcionar mi propia implementación de igualdad para el método Distinct()?

Podemos proporcionar nuestra propia implementación de igualdad a través de una clase personalizada que implemente la interfaz IEqualityComparer. Luego podemos pasar una instancia de esta clase al segundo parámetro de la sobrecarga del método Distinct(). Por ejemplo:


public class MiComparador : IEqualityComparer
{
public bool Equals(Persona x, Persona y)
{
return x.Id == y.Id;
}

public int GetHashCode(Persona obj)
{
return obj.Id.GetHashCode();
}
}

var listaUnica = lista.Distinct(new MiComparador());

¿Cómo puedo ordenar una lista después de eliminar los duplicados con el método Distinct()?

Podemos utilizar el método OrderBy() después de llamar al método Distinct() para ordenar la lista resultante. Por ejemplo:


var lista = new List { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4 };
var listaUnicaOrdenada = lista.Distinct().OrderBy(x => x);

En este ejemplo, la listaUnicaOrdenada contendría los valores 1, 2, 3 y 4, en orden ascendente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir