Maison >développement back-end >C++ >Comment trouver l'intersection de plusieurs listes à l'aide de IEnumerable.Intersect() ?
Utilisez IEnumerable.Intersect() pour trouver l'intersection de plusieurs listes
La méthode IEnumerable.Intersect() en C# vous permet de trouver des éléments communs dans deux séquences. Mais que se passe-t-il si vous avez plusieurs listes et souhaitez identifier les éléments présents dans toutes les listes ?
Question :
Étant donné une liste de listes d'entiers :
<code class="language-csharp">var list1 = new List<int>() { 1, 2, 3 }; var list2 = new List<int>() { 2, 3, 4 }; var list3 = new List<int>() { 3, 4, 5 }; var listOfLists = new List<List<int>>() { list1, list2, list3 };</code>
Comment utiliser IEnumerable.Intersect() pour trouver l'intersection de ces listes et obtenir le résultat List
Solution 1 : Agrégation HashSet
<code class="language-csharp">var intersection = listOfLists .Skip(1) .Aggregate( new HashSet<int>(listOfLists.First()), (h, e) => { h.IntersectWith(e); return h; } );</code>
Cette solution utilise la méthode Aggregate() pour accumuler un HashSet qui représente l'intersection des listes. La méthode Skip(1) garantit que la première liste de listOfLists est utilisée comme valeur initiale pour le HashSet.
Solution 2 : itération HashSet
<code class="language-csharp">var intersection = new HashSet<int>(listOfLists.First()); foreach (var list in listOfLists.Skip(1)) { var intersect = new HashSet<int>(intersection); intersection.IntersectWith(list); }</code>
Cette solution utilise également un HashSet, mais elle parcourt les listes restantes, créant un nouveau HashSet pour chaque intersection.
Considérations relatives aux performances :
Les benchmarks de performances montrent que dans la plupart des cas, la solution HashSet surpasse l'utilisation d'une liste. La différence de performances entre la méthode foreach et la méthode Aggregate est négligeable.
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!