Normalmente, usamos Distinct en C# para la deduplicación de arrays, tipos de datos generales basados en arrays, como int, cadena. también pueden usarse para la deduplicación de objetos, veamos la definición de método Distinct en C#:
Hay una carga pesada, se añade el primer parámetro, que es el método de expansión, sobre el método de expansión, por favor Baidu entiende. Estudiemos la deduplicación de objetos de Distinct, supongamos que ahora tenemos una clase People:
Declaramos una colección de objetos ListPeole:
Usemos el método Distinct en ListPeople sin ningún parámetro, y el resultado es el siguiente:
Se puede ver que si el método Distinct no tiene parámetros, se deduplicará p, p1, p2 en el conjunto de objetos, y no hay deduplicación para diferentes objetos con el mismo valor de miembro del objeto. Ahora tenemos un requisito: para las personas con el mismo ID, contamos como la misma persona, para que las personas no duplicadas del conjunto se produzcan (solo una para el mismo ID), en este momento usamos el segundo método Distinct, que requiere que los parámetros que se transmitan sean de tipo IEqualityComparer, heredando una interfaz genérica, añadimos el siguiente código:
Heredando la interfaz IEqualityComparer, debes implementar los métodos Equals y GetHashCode. Cuando comparamos, podemos pasar una entidad con un PeopleCompareByID:
Los resultados de la carrera son los siguientes:
Hemos logrado el efecto de la deduplicación por ID. Ahora los requisitos han cambiado de nuevo, el ID y la provincia son la misma persona, para generar la información de la persona (la misma puede generar una a voluntad), en este momento vemos que ID=0 y Province="Hubei" están duplicados, para deduplicarlo tenemos otra clase, o heredamos de IEqualityComparer:
De manera similar, al usar el método Distinct, se pasa una instancia de PeopleCompareByIDAndProvince:
Los resultados tras correr son los siguientes:
Logramos el efecto que queríamos. Este método puede utilizarse al encontrarse con el problema de la deduplicación con tres o más elementos de objeto para determinar si el objeto está duplicado. Lo anterior es mi humilde opinión.
|