我有一个方法可以搜索2个字符串中最长的匹配子字符串。它通过循环执行:
myFirstString.contains(mySecondString.subset(i,j))
但是如果相反,我想找到2个有序列表中最长的匹配子列表呢?换句话说,如果我的数组不是字符,而是其他对象怎么办?
对于字符串,List的等效“.contains”是什么?
myFirstList.contains(mySecondList.getRange(i,j))
不正确,因为此处.contains
正在寻找一个项目,而不是一个列表
.Intersection()
仅检查匹配的项目,而不是匹配项目的子列表。
(理想情况下,我希望此方法能够使用List< T>,但List< myObject>将会这样做。)
答案 0 :(得分:0)
您可以使用Contains
的扩展版本,该版本首先尝试查找list2
内list1
的第一个元素的第一个匹配项的索引。如果找到,则迭代到list2
内list1
的第一个元素的最后一次出现。如果使用SequenceEqual
找到任何此类索引的匹配项,则循环返回。以下是generic & extended
的{{1}}版本:
Contains
顺便说一句,您必须在课程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;
}
}
内实施IEquatable<T>
。