首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >比较两个集合是否相等,而不考虑其中项的顺序

比较两个集合是否相等,而不考虑其中项的顺序
EN

Stack Overflow用户
提问于 2008-09-08 16:36:16
回答 20查看 108.4K关注 0票数 177

我想比较两个集合(在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#),但是用您想要的任何语言给出答案,这都无关紧要。

注意:为了简单起见,我在示例中使用了整数,但我也希望能够使用引用类型的对象(它们不能正确地作为键,因为只比较对象的引用,而不比较内容)。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档