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

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,

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