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

时间:2017-08-08 07:49:37

标签: c# .net set compare equals

我有两个 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。

我如何做我的Equals方法?

谢谢!

2 个答案:

答案 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());