c# - 如何检查列表是否包含相同顺序的另一个列表

标签 c# list

在 C# 中是否有任何简单的方法来检查列表是否由另一个列表组成? 这是例子, 我有:

var list1 = new List<int>() {1, 2, 3, 4, 5, 6,}; 第二个 var list2 = new List<int>() {5, 6};

此列表是第一个列表的一部分,因此它应该返回 true。

var list1 = new List<int>() {1, 2, 3, 4, 5, 6,};var list3 = new List<int>() {1, 3};应该返回 false。

这不是关于检查第一个列表中的所有元素是否存在于第二个列表中,而是关于顺序。它必须具有相同的顺序。

最佳答案

这对我有用:

public bool ContainsSubsequence<T>(List<T> sequence, List<T> subsequence)
{
    return
        Enumerable
            .Range(0, sequence.Count - subsequence.Count + 1)
            .Any(n => sequence.Skip(n).Take(subsequence.Count).SequenceEqual(subsequence));
}

此代码使用 Enumerable.Range 遍历 sequence 中可能与 subsequence 相同的每个可能的起点,并检查是否与subsequence大小相同的sequence段在该位置实际上等于subsequence

所以对于这段代码:

var list1 = new List<int>() { 1, 2, 3, 4, 5, 6, };
var list2 = new List<int>() { 5, 6, };
var list3 = new List<int>() { 1, 3, };

Console.WriteLine(ContainsSubsequence(list1, list2));
Console.WriteLine(ContainsSubsequence(list1, list3));

我得到:

True
False

关于c# - 如何检查列表是否包含相同顺序的另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34575317/

相关文章:

c - 从类型 'char[50]' 分配给类型 'char *' 时,类型不兼容

c# - linq lambda多步骤数组

c# - 如何在 xaml WPF 中的堆栈面板或网格上设置绝对位置

c# - mysql 存储过程中出现错误的字符串值错误

c# - Entity Framework 非静态方法需要一个目标。 Lambda 中的空值

c# - 如何将列表添加到 C# 中的另一个列表?

java - 将 iText 列表项目符号更改为黑点

c# - 更改其他进程的键盘布局

c# - 如何确定 DependencyProperty 的更改内容

java - 按包含原始子字符串的另一个列表对字符串列表进行排序