In this article, I’ll explain four set operations – intersection, union, difference, and symmetric difference – and how to perform these operations using Linq methods (such as Intersect()). These methods work on any type that implements IEnumerable – such as lists, arrays, and sets.
Table of Contents
Set intersection with Intersect()
The intersection of set A {1,2} and set B {2,3} is {2}. This is because element 2 is contained in both set A and set B. The following Venn diagram illustrates the intersection of these two sets.
![Venn diagram showing set intersection](https://cdn-0.makolyte.com/wp-content/uploads/2023/02/set-intersection-venn-diagram.png)
You can use the Linq Intersect() method to get the intersection of two sets. Here’s an example:
using System.Collections.Generic;
using System.Linq;
var setA = new HashSet<int>() { 1, 2 };
var setB = new HashSet<int>() { 2, 3 };
var intersectionSet = setA.Intersect(setB);
Console.WriteLine($"Intersect of A and B: {string.Join(",", intersectionSet)}");
Code language: C# (cs)
This outputs the following:
Intersection of A and B: 2
Code language: plaintext (plaintext)
Set union with Union()
The union of set A {1,2} with set B {2,3} is {1,2,3}. The union is all elements contained in either set. The following Venn diagram illustrates the union of these two sets.
![Venn diagram showing set union](https://cdn-0.makolyte.com/wp-content/uploads/2023/02/set-union-venn-diagram.png)
You can use the Linq Union() method to get the union of two sets. Here’s an example:
using System.Collections.Generic;
using System.Linq;
var setA = new HashSet<int>() { 1, 2 };
var setB = new HashSet<int>() { 2, 3 };
var unionSet = setA.Union(setB);
Console.WriteLine($"Union of A and B: {string.Join(",", unionSet)}");
Code language: C# (cs)
This outputs the following:
Union of A and B: 1,2,3
Code language: plaintext (plaintext)
Set difference with Except()
The set difference between set A and set B means getting elements that are only in set A. For example, set A {1,2} – set B {2,3} is {1}. This is because element 1 is in set A but not in set B. The following Venn diagram illustrates the set difference.
![Venn diagram showing set difference](https://cdn-0.makolyte.com/wp-content/uploads/2023/02/set-difference-venn-diagram.png)
You can use the Linq Except() method to calculate the set difference. Here’s an example:
using System.Collections.Generic;
using System.Linq;
var setA = new HashSet<int>() { 1, 2 };
var setB = new HashSet<int>() { 2, 3 };
var elementsInAOnly = setA.Except(setB);
Console.WriteLine($"Elements in A only (A - B): {string.Join(",", elementsInAOnly)}");
Code language: C# (cs)
This outputs the following:
Elements in A only (A - B): 1
Code language: plaintext (plaintext)
Symmetric difference between two sets
The symmetric difference between set A {1,2} and set B {2,3} is {1,3}. This gets elements that are only in set A or set B, but not in both sets. The following Venn diagram illustrates the symmetric difference:
![Venn diagram showing the symmetric difference between two sets](https://cdn-0.makolyte.com/wp-content/uploads/2023/02/set-symmetric-difference-venn-diagram.png)
Symmetric difference is really a combination of other set operations: (A – B) union (B – A). You can calculate the symmetric difference by using Linq methods Except() and Union(), like this:
using System.Linq;
var setA = new HashSet<int>() { 1, 2 };
var setB = new HashSet<int>() { 2, 3 };
//(A - B) union (B - A)
var symmetricDifferenceSet = setA.Except(setB).Union(setB.Except(setA));
Console.WriteLine($"Symmetric difference of A and B: {string.Join(",", symmetricDifferenceSet)}");
Code language: C# (cs)
This outputs the following:
Symmetric difference of A and B: 1,3
Code language: plaintext (plaintext)
Note: HashSet has a method called SymmetricExceptWith() that gets the symmetric difference, but it modifies the original set.