Maison >développement back-end >C++ >Comment IEnumerable.Intersect() peut-il trouver efficacement l'intersection de plusieurs listes ?
Trouver efficacement l'intersection de plusieurs listes : méthode IEnumerable.Intersect()
En programmation, déterminer l'intersection de plusieurs listes est un problème courant. Ce problème peut être facilement résolu à l'aide de la puissante méthode IEnumerable.Intersect()
de .NET.
Supposons le scénario suivant : nous avons une liste de listes et nous voulons trouver des éléments présents dans toutes les listes. Par exemple, étant donné trois listes :
<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 };</code>
L'intersection attendue sera la liste :
<code class="language-csharp">{ 3 }</code>
Cette intersection peut être calculée efficacement en utilisant IEnumerable.Intersect()
. Cependant, il est important de noter que cette méthode nous oblige à fournir un IEnumerable<T>
en entrée.
Pour satisfaire cette exigence, nous pouvons regrouper plusieurs IEnumerable<T>
objets en une seule liste, comme indiqué dans la solution suivante :
<code class="language-csharp">var listOfLists = new List<List<int>>() { list1, list2, list3 }; var intersection = listOfLists .Skip(1) .Aggregate( new HashSet<int>(listOfLists.First()), (h, e) => { h.IntersectWith(e); return h; } );</code>
Ce code parcourt les listes de listOfLists
(sauf la première liste) et met à jour HashSet.IntersectWith()
avec l'intersection de HashSet
avec la liste actuelle. Ce processus efficace aboutit finalement à l’intersection souhaitée, stockée dans la variable intersection
.
Cette solution exploite efficacement HashSet
, qui est optimisé pour les opérations d'intersection rapides. De plus, le code est clair et concis, ce qui le rend idéal pour cette tâche.
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!