Di solito, usiamo Distinct in C# per la deduplicazione degli array, i tipi di dati generali basati su array, come int, string. possono essere usati anche per la deduplicazione degli oggetti, diamo un'occhiata alla definizione di metodo Distinct di C#:
C'è un carico pesante, il primo parametro viene aggiunto, cioè il metodo di espansione, riguardo al metodo di espansione, per favore Baidu capisca. Studiamo la deduplicazione degli oggetti di Distinct, supponiamo che ora abbiamo una classe Persone:
Dichiariamo una raccolta di oggetti ListPeole:
Usiamo il metodo Distinct su ListPeople senza alcun parametro, e il risultato è il seguente:
Si può vedere che se il metodo Distinct non ha parametri, deduplicerà p, p1, p2 nell'insieme degli oggetti, e non c'è deduplicazione per oggetti diversi con lo stesso valore di elemento dell'oggetto. Ora abbiamo un requisito: per le persone con lo stesso ID, contiamo come la stessa persona, di produrre le persone non duplicate nel set (ne produciamo solo una per lo stesso ID), al momento usiamo il secondo metodo Distinct, il metodo richiede che i parametri passati siano di tipo IEqualityComparer, ereditando un'interfaccia generica, aggiungiamo il seguente codice:
Ereditando l'interfaccia IEqualityComparer, devi implementare i metodi Equals e GetHashCode. Quando confrontiamo, possiamo far passare un'entità con un PeopleCompareByID:
I risultati della corsa sono i seguenti:
Abbiamo raggiunto l'effetto della deduplicazione tramite ID. Ora i requisiti sono cambiati di nuovo, l'ID e la provincia sono la stessa persona, per fornire le informazioni della persona (che possono esserne una a piacimento), a questo punto vediamo che ID=0 e Province="Hubei" sono duplicati, per deduplicarlo abbiamo un'altra classe, o ereditiamo da IEqualityComparer:
Analogamente, utilizzando il metodo Distinct, viene approvata un'istanza di PeopleCompareByIDAndProvince:
I risultati dopo la corsa sono i seguenti:
Abbiamo ottenuto l'effetto che volevamo. Questo metodo può essere utilizzato quando si incontra il problema della deduplicazione con tre o più membri dell'oggetto per determinare se l'oggetto è duplicato. Quanto sopra è la mia umile opinione.
|