我想比较两个集合(在 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#),但可以用任何您希望的语言给出答案,没关系。
注意:为了简单起见,我在示例中使用了整数,但我也希望能够使用引用类型的对象(它们不能正确地作为键,因为只比较对象的引用,而不是内容)。