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
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
。这意味着它将返回一个布尔值,指示该序列是否包含在另一个序列中。这正是你所要求的。所以…不,没有等效的列表,我应该自己编写实现吗?(这篇文章似乎对“子序列”的定义相当混乱——对不起,我假设它不只是处理子字符串。)答案对你有用吗?或者你是否面临任何其他问题?