Maison >développement back-end >C++ >Comment trouver efficacement l'intersection de plusieurs listes en C# ?

Comment trouver efficacement l'intersection de plusieurs listes en C# ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-15 11:49:47699parcourir

How to Efficiently Find the Intersection of Multiple Lists in C#?

Détermination des éléments communs dans plusieurs listes C#

Imaginez que vous ayez une collection de listes et que vous ayez besoin d'identifier les éléments présents dans chacune d'elles. Par exemple :

<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>

Le résultat souhaité est une liste contenant uniquement les éléments communs aux trois listes : {3}.

Tirer parti de IEnumerable.Intersect() avec un accumulateur de liste

Une méthode efficace consiste à utiliser IEnumerable.Intersect() de manière itérative avec une liste faisant office d'accumulateur :

<code class="language-csharp">var intersection = listOfLists.Skip(1)
    .Aggregate(
        new List<int>(listOfLists.First()),
        (list, subList) => list.Intersect(subList).ToList()
    );</code>

Ce code commence par la première liste puis la croise de manière itérative avec chaque liste suivante.

Employer IEnumerable.Intersect() avec un accumulateur HashSet

Une approche plus efficace utilise un HashSet comme accumulateur, en raison de ses capacités d'intersection optimisées :

<code class="language-csharp">var intersection = listOfLists.Skip(1)
    .Aggregate(
        new HashSet<int>(listOfLists.First()),
        (h, e) => { h.IntersectWith(e); return h; }
    );</code>

Cette version utilise IntersectWith(), une opération plus performante pour les ensembles. N'oubliez pas que listOfLists doit contenir au moins une liste pour que cela fonctionne correctement.

Les deux techniques offrent des moyens efficaces de trouver l'intersection de plusieurs listes à l'aide de IEnumerable.Intersect(). La méthode HashSet est généralement préférée pour ses avantages en termes de performances lorsqu'il s'agit de jeux de données plus volumineux.

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