C# 确定集合是否相等(集合组成的集合)
我有两个int的列表C# 确定集合是否相等(集合组成的集合),c#,.net,set,compare,equals,C#,.net,Set,Compare,Equals,我有两个int的列表 var a = new List<IList<int>>(); var b = new List<IList<int>>(); var a=新列表(); var b=新列表(); 它们中的每一个都有以下数据: var a = new List<IList<int>>() { new List<int>() { 1,
var a = new List<IList<int>>();
var b = new List<IList<int>>();
var a=新列表();
var b=新列表();
它们中的每一个都有以下数据:
var a = new List<IList<int>>()
{
new List<int>() { 1, 2 },
new List<int>() { 4, 5, 6 },
};
var b = new List<IList<int>>()
{
new List<int>() { 6, 5, 4 },
new List<int>() { 2, 1 },
};
var a=新列表()
{
新列表(){1,2},
新列表(){4,5,6},
};
var b=新列表()
{
新列表(){6,5,4},
新列表(){2,1},
};
我想把a
和b
当作集合来处理,因此,当a.Equals(b)时,
应该返回true
如何使用Equals方法?不使用linq检查每个元素的一种方法是 首先创建一个EqualityComparer
class ListComparer : IEqualityComparer<IList<int>>
{
public bool Equals(IList<int> x, IList<int> y)
{
return x.SequenceEqual(y);
}
public int GetHashCode(IList<int> obj)
{
throw new NotImplementedException();
}
}
不使用linq检查每个元素的一种方法是 首先创建一个EqualityComparer
class ListComparer : IEqualityComparer<IList<int>>
{
public bool Equals(IList<int> x, IList<int> y)
{
return x.SequenceEqual(y);
}
public int GetHashCode(IList<int> obj)
{
throw new NotImplementedException();
}
}
假设您的支票需要是无订单的,您应该签出以下内容: 一组集合
IEqualityComparer
实现可能如下所示:
public bool Equals(List<IList<int>> x, List<IList<int>> y)
{
foreach(var innerList in x)
{
var innerSet = new HashSet<int>(innerList);
var hasEquivalent = false;
foreach(var otherInnerList in y)
{
hasEquivalent = innerSet.SetEquals(otherInnerList);
if(hasEquivalent) break;
}
if(!hasEquivalent) return false;
}
return true;
}
public bool Equals(列表x,列表y)
{
foreach(x中的变量innerList)
{
var innerSet=新的HashSet(innerList);
var hasEquivalent=假;
foreach(y中的变量otherInnerList)
{
hasEquality=innerSet.SetEquals(其他innerList);
如果(相当于)断裂;
}
如果(!hasEquivalent)返回false;
}
返回true;
}
假设您的支票需要无订单,您应该签出以下内容:
一组集合IEqualityComparer
实现可能如下所示:
public bool Equals(List<IList<int>> x, List<IList<int>> y)
{
foreach(var innerList in x)
{
var innerSet = new HashSet<int>(innerList);
var hasEquivalent = false;
foreach(var otherInnerList in y)
{
hasEquivalent = innerSet.SetEquals(otherInnerList);
if(hasEquivalent) break;
}
if(!hasEquivalent) return false;
}
return true;
}
public bool Equals(列表x,列表y)
{
foreach(x中的变量innerList)
{
var innerSet=新的HashSet(innerList);
var hasEquivalent=假;
foreach(y中的变量otherInnerList)
{
hasEquality=innerSet.SetEquals(其他innerList);
如果(相当于)断裂;
}
如果(!hasEquivalent)返回false;
}
返回true;
}
您可以使用扩展方法。您可以使用扩展方法。请考虑到我不是比较两个列表,而是比较两个列表,我想确定嵌套的两个级别是否相等。我已更新了答案,以说明集合的集合,假设每个内部集合具有相同的固定大小,一个内部集合在一边需要在另一边有一个等价物对不起,但是对于我的问题,我不能假设每个集合都有一个固定的大小。请参阅我更新的问题(数据)。它应该与样本中的数据一起工作。我可能表达得不好。我想澄清的是,new List(){1,2},new List(){4,5,6}}
并不等同于new List(){1,5,6},new List(){2,4,5,6}
我的意思是,内部集合将在大小相同的集合子集中寻找等价项。请考虑到我不是在比较两个列表,但是有两个列表,我想确定嵌套的两个级别是否相等。我更新了答案,以说明集合的集合,假设每个内部集合具有相同的固定大小,并且一侧的内部集合需要在另一侧具有相同的大小抱歉,但对于我的问题,我不能假设每个集合具有固定的大小。请参阅我更新的问题(数据)。它应该与样本中的数据一起工作。我可能表达得不好。我想澄清的是,new List(){1,2},new List(){4,5,6}}
并不等同于new List(){1,5,6},new List(){2,4,5,6}
我的意思是,内部集合将在大小相同的集合子集中寻找等价项。请考虑到我不是在比较两个列表,但是有两个列表,我想确定两个嵌套级别的相等性。代码如下,它将比较列表1和列表2的每个元素,当比较listone和listtwo时,它将使用ListComparer with intern将listone和listtwo的元素视为列表,并将它们与列表进行比较,代码也可以修改,以便比较列表列表。。。。。。。。。。通过更改public bool Equals(IList x,IList y){return x.SequenceEqual(y,new ListComparer());}请考虑到我不是比较两个列表,而是比较两个列表,我想确定两个嵌套级别的相等性。代码如下所示,它将比较列表一和列表二的每个元素,当比较列表一和列表二时,它将使用ListComparer with intern将列表一和列表二的元素视为列表,并将它们与列表进行比较,还可以修改代码,以便比较列表列表的列表。。。。。。。。。。通过更改public bool Equals(IList x,IList y){return x.SequenceEqual(y,new ListComparer());}