如何确定两个HashSet是否相等(按值,而不是通过引用)?

时间:2021-01-28 05:32:46

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.

我试图确定.NET 3.5(C#)中的两个HashSet对象是否是相等的集合,即包含相同的值。这似乎是人们显然想做的事情,但是所提供的功能似乎都没有给你这些信息。

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?

这会一直有效吗?有没有更好的办法?为什么HashSet没有公共bool IsEqualSetWith()函数?

2 个解决方案

#1


70  

Look at the method SetEquals.

看看方法SetEquals。

my_hashset.SetEquals(other);

#2


4  

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

#1


70  

Look at the method SetEquals.

看看方法SetEquals。

my_hashset.SetEquals(other);

#2


4  

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