我想比较两个集合(在 C # 中) ,但是我不确定有效实现它的最佳方法。
我读过另一篇关于 可枚举的,序列相等的的文章,但它并不是我想要的。
在我的例子中,如果两个集合都包含相同的项(无论顺序如何) ,那么它们将是相等的。
例如:
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 #)编写的,但是不管你用什么语言给出你的答案,都没有关系。
注意: 为了简单起见,我在示例中使用了整数,但是我也希望能够使用引用类型的对象(它们作为键的行为不正确,因为只比较对象的引用,而不是内容)。