Home >Backend Development >C++ >How to Find the Intersection of Multiple Lists Using IEnumerable.Intersect()?
Use IEnumerable.Intersect() to find the intersection of multiple lists
The IEnumerable.Intersect() method in C# allows you to find common elements in two sequences. But what if you have multiple lists and want to identify elements that are present in all lists?
Question:
Given a list of lists of integers:
<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>
How to use IEnumerable.Intersect() to find the intersection of these lists and get the result List
Solution 1: HashSet Aggregation
<code class="language-csharp">var intersection = listOfLists .Skip(1) .Aggregate( new HashSet<int>(listOfLists.First()), (h, e) => { h.IntersectWith(e); return h; } );</code>
This solution uses the Aggregate() method to accumulate a HashSet that represents the intersection of lists. The Skip(1) method ensures that the first list in listOfLists is used as the initial value for the HashSet.
Solution 2: HashSet iteration
<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>
This solution also uses a HashSet, but it iterates over the remaining lists, creating a new HashSet for each intersection.
Performance considerations:
Performance benchmarks show that in most cases the HashSet solution outperforms using a List. The difference in performance between the foreach method and the Aggregate method is negligible.
The above is the detailed content of How to Find the Intersection of Multiple Lists Using IEnumerable.Intersect()?. For more information, please follow other related articles on the PHP Chinese website!