我想比较两个集合(在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#),但是用您想要的任何语言给出答案,这都无关紧要。
注意:为了简单起见,我在示例中使用了整数,但我也希望能够使用引用类型的对象(它们不能正确地作为键,因为只比较对象的引用,而不比较内容)。
https://stackoverflow.com/questions/50098
复制相似问题