Maison >développement back-end >C++ >Comment trouver l'intersection de plusieurs listes à l'aide de IEnumerable.Intersect() ?

Comment trouver l'intersection de plusieurs listes à l'aide de IEnumerable.Intersect() ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-15 11:36:48739parcourir

How to Find the Intersection of Multiple Lists Using 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() { 3 } ?

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!

Déclaration:
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