比较两个集合是否相等,而不论它们中项的顺序如何我想比较两个集合(在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 equalforeach (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#),但是用您想要的语言给出答案并不重要。注:为了简单起见,我在示例中使用了整数,但我也希望能够使用引用类型的对象(它们不能正确地作为键运行,因为只比较了对象的引用,而不是内容)。
3 回答
ITMISS
TA贡献1871条经验 获得超8个赞
bool equal = collection1.OrderBy(i => i).SequenceEqual( collection2.OrderBy(i => i));
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
private bool SetEqual (List<int> left, List<int> right) { if (left.Count != right.Count) return false; Dictionary<int, int> dict = new Dictionary<int, int>(); foreach (int member in left) { if (dict.ContainsKey(member) == false) dict[member] = 1; else dict[member]++; } foreach (int member in right) { if (dict.ContainsKey(member) == false) return false; else dict[member]--; } foreach (KeyValuePair<int, int> kvp in dict) { if (kvp.Value != 0) return false; } return true; }
- 3 回答
- 0 关注
- 717 浏览
添加回答
举报
0/150
提交
取消