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