我有两个 int
列表var a = new List<IList<int>>();
var b = new List<IList<int>>();
他们每个人都有以下数据:
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 },
};
我希望将a
和b
视为集合,因此,在a.Equals(b),
时,它应该返回true。
我如何做我的Equals方法?
谢谢!
答案 0 :(得分:3)
假设您的支票无需订单,您应该查看:LINQ : Determine if two sequences contains exactly the same elements。
一组集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;
}
答案 1 :(得分:1)
在不使用linq检查foreach元素的情况下执行此操作的一种方法是 首先创建一个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();
}
}
然后使用equalitycomparer
比较两个元素var equals= one.SequenceEqual(two,new ListComparer());