Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串的泛型列表等价物是什么?_C# - Fatal编程技术网

C# 字符串的泛型列表等价物是什么?

C# 字符串的泛型列表等价物是什么?,c#,C#,我有一个方法可以在两个字符串中搜索最长的匹配子字符串。它通过循环执行以下操作: myFirstString.contains(mySecondString.subset(i,j)) 但是,如果我想在2个有序列表中找到最长的匹配子列表,该怎么办?换句话说,如果我的数组不是字符,而是其他对象,该怎么办 字符串的“.contains”的列表等价物是什么 myFirstList.contains(mySecondList.getRange(i,j))不正确,因为.contains此处查找的是项目,而不

我有一个方法可以在两个字符串中搜索最长的匹配子字符串。它通过循环执行以下操作:

myFirstString.contains(mySecondString.subset(i,j))
但是,如果我想在2个有序列表中找到最长的匹配子列表,该怎么办?换句话说,如果我的数组不是字符,而是其他对象,该怎么办

字符串的“.contains”的列表等价物是什么

myFirstList.contains(mySecondList.getRange(i,j))
不正确,因为
.contains
此处查找的是项目,而不是列表。
.Intersection()
仅检查匹配的项目,而不检查匹配的项目子列表


(理想情况下,我希望此方法能够使用List,但List就可以了。)

您可以使用
Contains
的扩展版本,首先尝试在
list1
中查找
list2
第一个元素的第一次出现的索引。如果找到它,则迭代到
list1
中的
list2
的第一个元素的最后一次出现。如果使用
SequenceEqual
找到任何此类索引的匹配项,则循环返回。以下是
包含的
通用和扩展版

public static class ExtensionMethods
{
    public static bool Contains<T>(this List<T> list1, List<T> list2)
    {
        int firstIndex = list1.IndexOf(list2.First());
        int lastIndex = list1.LastIndexOf(list2.First());

        if (firstIndex == -1) return false;

        for (int i = firstIndex; i <= lastIndex; i++)
        {
            if (list1.GetRange(i, list2.Count).SequenceEqual(list2)) return true;
        }

        return false;
    }
}
公共静态类扩展方法
{
公共静态bool包含(此列表列表1、列表列表列表2)
{
int firstIndex=list1.IndexOf(list2.First());
int lastIndex=list1.LastIndexOf(list2.First());
if(firstIndex=-1)返回false;

对于(int i=firstIndex;我可能重复编辑:为了澄清,我正在寻找子字符串的等效项,而不是子序列。如果我有ABCA和ACAC,那么我希望返回“CA”作为最长匹配项,而不是“a…CA”你说你在寻找它接受序列的
Contains
。这意味着它将返回一个布尔值,指示该序列是否包含在另一个序列中。这正是你所要求的。所以…不,没有等效的列表,我应该自己编写实现吗?(这篇文章似乎对“子序列”的定义相当混乱——对不起,我假设它不只是处理子字符串。)答案对你有用吗?或者你是否面临任何其他问题?