什么是 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,但 List 就可以了。

什么是 Strings.Contains 的泛型列表等效项

您可以使用Contains的扩展版本,该版本首先尝试查找list1list2的第一个元素的第一次出现的索引。如果找到,则迭代到list1中第一个list2元素的最后一次出现。如果使用 SequenceEqual 找到任何此类索引的匹配项,则循环返回。这是Containsgeneric & 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>