我想比较两个集合(在C#中),但是我不确定有效实现这一点的最佳方法。
我已经阅读了有关Enumerable.SequenceEqual的其他主题,但这并不是我想要的。
在我的情况下,如果两个集合都包含相同的项(无论顺序如何),它们将相等。
例:
collection1 = {1, 2, 3, 4};
collection2 = {2, 4, 1, 3};
collection1 == collection2; // true
我通常要做的是遍历一个集合的每个项目,看是否在另一个集合中,然后遍历另一个集合的每个项目,看它是否在第一个集合中。(我从比较长度开始)。
if (collection1.Count != collection2.Count)
return false; // the collections are not equal
foreach (Item item in collection1)
{
if (!collection2.Contains(item))
return false; // the collections are not equal
}
foreach (Item item in collection2)
{
if (!collection1.Contains(item))
return false; // the collections are not equal
}
return true; // the collections are equal
但是,这并不完全正确,并且可能不是比较两个集合是否相等的最有效方法。
我能想到的一个例子是错误的:
collection1 = {1, 2, 3, 3, 4}
collection2 = {1, 2, 2, 3, 4}
这将与我的实现相同。我应该只计算找到每个项目的次数并确保两个集合中的计数相等吗?
这些示例使用某种C#(我们称其为伪C#),但是用您希望使用的任何语言给出答案,都没有关系。
注意:为了简单起见,我在示例中使用了整数,但是我也希望能够使用引用类型的对象(它们不能正确地用作键,因为仅比较对象的引用,而不是内容)。