什么是 Strings.Contains 的泛型列表等效项
本文关键字:列表 泛型 Strings Contains 什么 | 更新日期: 2023-09-27 17:56:04
我有一个方法可以搜索 2 个字符串中最长的匹配子字符串。它通过循环遍历来做到这一点:
myFirstString.contains(mySecondString.subset(i,j))
但是,如果我想在 2 个有序列表中找到最长的匹配子列表怎么办?换句话说,如果我的数组不是字符,而是其他对象怎么办?
字符串的".contains"等效列表是什么?
myFirstList.contains(mySecondList.getRange(i,j))
不正确,因为.contains
在这里查找的是项目,而不是列表。
.Intersection()
仅检查匹配的项目,而不检查匹配的项目子列表。
(理想情况下,我希望此方法能够使用 List
您可以使用Contains
的扩展版本,该版本首先尝试查找list1
中list2
的第一个元素的第一次出现的索引。如果找到,则迭代到list1
中第一个list2
元素的最后一次出现。如果使用 SequenceEqual
找到任何此类索引的匹配项,则循环返回。这是Contains
的generic & extended
版本:
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;
}
}
顺便说一下,您必须在类 T
中实现IEquatable<T>
。