Maison > développement back-end > C++ > Comment puis-je rechercher efficacement des éléments distincts entre deux listes d'objets personnalisés en C# ?

Comment puis-je rechercher efficacement des éléments distincts entre deux listes d'objets personnalisés en C# ?

Linda Hamilton
Libérer: 2025-01-23 01:05:12
original
829 Les gens l'ont consulté

How Can I Efficiently Find Distinct Elements Between Two Lists of Custom Objects in C#?

Personnaliser la comparaison d'objets pour différencier les listes

Lorsqu'il s'agit de deux listes génériques contenant des objets personnalisés, extraire des éléments uniques dans une liste (en particulier ceux qui ne sont pas présents dans l'autre liste) est une opération utile.

La méthode

.Except() apporte une solution efficace pour cela. Il accepte deux arguments de liste et renvoie une nouvelle liste contenant les éléments de la première liste mais introuvables dans la seconde liste.

Remplacer l'égalité et la comparaison par défaut

Si votre type d'objet personnalisé remplace les méthodes Equals() et GetHashCode(), vous pouvez utiliser .Except() comme suit :

<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
Copier après la connexion

Dans ce cas, la comparaison des objets repose sur leurs méthodes remplacées. Toute différence d'égalité sera reflétée dans les différences entre les listes.

Comparateur d'égalité personnalisé

Cependant, si votre critère d'égalité nécessite une implémentation personnalisée, vous pouvez définir la vôtre IEqualityComparer<T>. Voici un exemple d'utilisation de l'ID comme base de comparaison :

<code class="language-csharp">public class IdComparer : IEqualityComparer<customobject>
{
    // ... (实现如提供的答案中所示)
}</code>
Copier après la connexion

Vous pourrez ensuite utiliser ce comparateur personnalisé avec .Except() via :

<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
Copier après la connexion

Cette comparaison personnalisée garantira que l'opération .Except() répond à vos exigences spécifiques en matière d'égalité.

Conserver les doublons

Il convient de noter que .Except() exclura les éléments en double. Si vous devez conserver les doublons, une autre méthode consiste à convertir la deuxième liste en HashSet et à utiliser ceci :

<code class="language-csharp">var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
Copier après la connexion

Cette méthode conservera tous les éléments uniques dans la liste résultante list3, y compris les doublons.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal