Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you determine if two HashSets are equal (by value, not by reference)?

I am trying to determine if two HashSet objects in .NET 3.5 (C#) are equal sets, i.e. contain the same values. This seems like something one would obviously want to do but none of the provided functions seem to give you this information.

The way I can think to do this is by checking if the count of the two sets are equal and one set is a subset (not proper) of the other. I think the only way that can happen is if they are equal sets. Example code:

HashSet<int> set1 = new HashSet<int>();
set1.Add(1);
set1.Add(2);
set1.Add(3);

HashSet<int> set2 = new HashSet<int>();
set2.Add(1);
set2.Add(2);
set2.Add(3);

if(set1.Count == set2.Count && set1.IsSubsetOf(set2))
{
    // do something
}

Would this always work? Is there a better way? Why doesn't HashSet have a public bool IsEqualSetWith() function?

like image 659
Craig W Avatar asked Jan 30 '09 01:01

Craig W


2 Answers

Look at the method SetEquals.

my_hashset.SetEquals(other);
like image 157
Michael Burr Avatar answered Oct 28 '22 12:10

Michael Burr


IEqualityComparer<HashSet<int>> comp = HashSet<int>.CreateSetComparer();
Console.WriteLine("CreateSetComparer set1 == set2 : {0}", comp.Equals(set1, set2));
// or
bool areEqual = HashSet<int>.CreateSetComparer().Equals(set1, set2);
like image 28
Gregory Adam Avatar answered Oct 28 '22 13:10

Gregory Adam