Maison >développement back-end >C++ >Comment puis-je trouver efficacement des éléments uniques dans une liste qui ne figurent pas dans une autre ?
Comparez les différences entre deux listes
Lorsque vous traitez deux listes contenant des objets personnalisés, il est souvent nécessaire d'identifier des éléments uniques dans la première liste qui ne sont pas présents dans la deuxième liste. Ce problème peut être résolu efficacement en utilisant la méthode .Except()
.
Par exemple, considérons deux listes list1
et list2
, qui contiennent toutes deux des instances de CustomObject
. Pour extraire des éléments propres à list1
, utilisez simplement le code suivant :
<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
Cette approche simple suppose que le type CustomObject
remplace les méthodes Equals()
et GetHashCode()
, permettant des comparaisons d'égalité et de hachage correctes.
Cependant, si une comparaison plus granulaire est requise, par exemple basée sur un attribut spécifique (tel que l'ID), un comparateur d'égalité personnalisé doit être implémenté. Comme indiqué ci-dessous, cela nécessite de définir une classe qui implémente l'interface IEqualityComparer<T>
:
<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject> { public int GetHashCode(CustomObject co) { return co.Id.GetHashCode(); } public bool Equals(CustomObject x1, CustomObject x2) { return x1.Id == x2.Id; } }</code>
En utilisant ce comparateur personnalisé, le code suivant effectuera la comparaison souhaitée :
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
Il est important de noter que cette méthode éliminera tout élément en double dans le résultat. Si les doublons doivent être préservés, une stratégie alternative utilisant des ensembles et une clause where
est plus appropriée :
<code class="language-csharp">var set2 = new HashSet<CustomObject>(list2); var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
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!