什么是Strings.Contains的通用列表等价物?

时间:2014-04-01 17:59:19

标签: c#

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

myFirstString.contains(mySecondString.subset(i,j))

但是如果相反,我想找到2个有序列表中最长的匹配子列表呢?换句话说,如果我的数组不是字符,而是其他对象怎么办?

对于字符串,List的等效“.contains”是什么?

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

(理想情况下,我希望此方法能够使用List< T>,但List< myObject>将会这样做。)

1 个答案:

答案 0 :(得分:0)

您可以使用Contains的扩展版本,该版本首先尝试查找list2list1的第一个元素的第一个匹配项的索引。如果找到,则迭代到list2list1的第一个元素的最后一次出现。如果使用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>