Normalmente, usamos Distinct em C# para deduplicação de arrays, tipos gerais de dados baseados em arrays, como int, string. também podem ser usados para deduplicação de objetos, vamos dar uma olhada na definição de método Distinct em C#:
Há uma carga pesada, o primeiro parâmetro é adicionado, que é o método de expansão, sobre o método de expansão, por favor, o Baidu entenda. Vamos estudar a deduplicação de objetos do Distinct, digamos que agora temos uma classe Pessoas:
Declaramos uma coleção de objetos ListPeole:
Vamos usar o método Distinct no ListPeople sem nenhum parâmetro, e o resultado é o seguinte:
Pode-se ver que, se o método Distinct não tiver parâmetros, ele irá deduplicar p, p1, p2 no conjunto de objetos, e não há deduplicação para diferentes objetos com o mesmo valor de membro do objeto. Agora temos um requisito: para Pessoas com o mesmo ID, contamos como a mesma pessoa, para gerar as pessoas não duplicadas no conjunto (apenas uma para o mesmo ID), neste momento, usamos o segundo método Distinct, que exige que os parâmetros passados sejam do tipo IEqualityComparer, herdando uma interface genérica, adicionamos o seguinte código:
Herdando a interface IEqualityComparer, você deve implementar os métodos Equals e GetHashCode. Quando comparamos, podemos passar uma entidade com um PeopleCompareByID:
Os resultados da corrida são os seguintes:
Conseguimos o efeito da deduplicação por DI. Agora os requisitos mudaram novamente, o ID e a província são a mesma pessoa, para gerar as informações da pessoa (a mesma pode gerar uma à vontade), neste momento, vemos que ID=0 e Province="Hubei" estão duplicados, para desduplicar, temos outra classe, ou herdar do IEqualityComparer:
De forma semelhante, ao usar o método Distinct, uma instância de PeopleCompareByIDAndProvince é passada:
Os resultados após a corrida são os seguintes:
Alcançamos o efeito que queríamos. Esse método pode ser usado ao enfrentar o problema de deduplicação com três ou mais elementos de objeto para determinar se o objeto é duplicado. O que foi dito acima é minha humilde opinião.
|