Comment trouver et supprimer les doublons d'objets dans une collection à l'aide de LINQ?
J'ai une simple classe représentant un objet. Il y a 5 propriétés (une date, 2 décimales, un entier et une chaîne de caractères). J'ai une classe de collection, dérivé de CollectionBase
, qui est une classe de conteneur pour la tenue de multiples objets de ma première classe.
Ma question est, je veux supprimer les doublons d'objets (par exemple les objets qui ont la même date, même décimales, même entiers et de la même chaîne). Est-il d'une requête LINQ, je peux écrire à trouver et supprimer les doublons? Ou à tout le moins?
OriginalL'auteur Icemanind | 2010-07-13
Vous devez vous connecter pour publier un commentaire.
Vous pouvez supprimer les doublons à l'aide de la
Distinct
opérateur.Il y a deux surcharges - on utilise le comparateur d'égalité par défaut pour le type (qui, pour un type personnalisé qui fera appel à la
Equals()
méthode du type). La seconde vous permet de fournir votre propre comparateur d'égalité. Ils reviennent tous les deux un nouvelle séquence représentant de votre jeu original sans doublons. Ni surcharge modifie votre collecte initiale - ils reviennent une nouvelle séquence qui exclut les doublons..Si vous voulez juste trouver les doublons, vous pouvez utiliser
GroupBy
de le faire:Pour supprimer les doublons de quelque chose comme un
IList<>
que vous pouvez faire:LINQ des méthodes d'extension de créer de nouveaux ensembles de points, votre collection d'origine reste intact.
Merci pour toutes les infos!
OriginalL'auteur LBushkin
Si votre classe simple utilise
Equals
d'une manière qui répond à vos exigences, alors vous pouvez utiliser le caractère Distinct de la méthodeSi pas, alors vous aurez besoin de fournir une instance de
IEqualityComparer<T>
qui compare les valeurs de la manière que vous désirez. Par exemple (null problèmes ignorés pour des raisons de concision)Notez l'utilisation d'une constante pour
GetHashCode
est intentionnelle. Sans connaître les détails les plus intimes sur la sémantique deMyType
il est impossible d'écrire une correcte et efficace fonction de hachage. En lieu et place de l'efficace de la fonction de hachage j'ai utilisé une constante qui est correct et ce indépendamment de la sémantique du type.il sera de retour une nouvelle collection qui n'a pas de doublons. Il ne modifiera pas une collection.
D'excellents et de bonnes pratiques réponse
OriginalL'auteur JaredPar