检查List <list <int>&gt;包含List <int> </int> </list <int>

时间:2014-02-22 14:06:47

标签: c# list

检查List<List<int>>是否包含List<int>的最佳方式是什么:

List<List<int>> test = new List<List<int>>();
List<int> a = new List<int>{1,2,3,4,5,6};
List<int> b = new List<int>{1,2,3,4,5,6};
test.Add(a);
Debug.Log(test.Contains(b));

我知道Contains()没有检查List<T>内容,所以我正在寻找另一种方法来确定等价。

2 个答案:

答案 0 :(得分:5)

试试这个:

test.Any(x => x.All(b.Contains));

这将返回true,但这不完全正确。如果true包含的元素多于b(例如1,2,3,4,5,6等),它也会返回7,8,9。要解决此问题,您可以尝试SequenceEqual

test.Any(x => x.OrderBy(y => y)
    .SequenceEqual(b.OrderBy(z => z)));

如果您不希望trueb无序(例如2,1,3,4,5,6)时返回OrderBy,请不要使用SequenceEqual;只需使用test.Any(x => x.SequenceEqual(b));

{{1}}

答案 1 :(得分:0)

列表的相等性通过引用而不是按值进行比较,因此test.Contains(b)为false,因为a == b为false。但是有一个运算符SequenceEqual会根据内容比较两个列表,因此在您的示例中a.SequenceEqual(b)为真,因此您可以这样做:

test.Any(x => x.SequenceEqual(b))

将返回true。