确定集合是否相等(由集合组成的集合)



>我有两个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 },
};

我想将ab视为集合的集合,因此,在a.Equals(b),时它应该返回 true。

我怎样才能做我的等于方法?

假设你的检查需要无序,你应该检查一下: LINQ:确定两个序列是否包含完全相同的元素。

一组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;
}

不使用 linq 检查每个元素的一种方法是 首先创建一个相等比较器

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();
}
}

然后使用相等比较器比较两个元素

var equals=  one.SequenceEqual(two,new ListComparer());

相关内容

  • 没有找到相关文章

最新更新