在c#中是否有任何简单的方法来检查列表是否包含另一个列表?这是一个例子,我有:
var list1 = new List
第二个
var list2 = new List
此列表是第一个列表的一部分,因此它应返回true.
var list1 = new List
并且
var list3 = new List
应该返回false.
它不是要检查第一个列表中的所有元素是否都存在于第二个列表中,而是关于顺序.它必须具有相同的顺序.
这对我有用:
public bool ContainsSubsequence(List sequence, List subsequence) { return Enumerable .Range(0, sequence.Count - subsequence.Count + 1) .Any(n => sequence.Skip(n).Take(subsequence.Count).SequenceEqual(subsequence)); }
此代码用于Enumerable.Range
遍历sequence
其中可能相同的每个可能的起点subsequence
,并检查sequence
与subsequence
此位置相同大小的段是否实际等于subsequence
.
所以对于这段代码:
var list1 = new List() { 1, 2, 3, 4, 5, 6, }; var list2 = new List () { 5, 6, }; var list3 = new List () { 1, 3, }; Console.WriteLine(ContainsSubsequence(list1, list2)); Console.WriteLine(ContainsSubsequence(list1, list3));
我明白了:
True False