字符串数组:搜索文本,返回第一次出现的行号

本文关键字:第一次 返回 数组 搜索 文本 字符串 | 更新日期: 2023-09-27 17:51:18

在我的字符串数组中,我想查找一些文本并将第一次出现的行号作为整型返回。

正在工作;

public static int LookUpLineNumber(String[] item, string TextToLookUp)
{
    int m;
    for (m = 0; m < item.Count(); m++)
    {
        if (item[m].Contains(TextToLookUp))
        {
            break;
        }
    }
    return m++;
}

然而,我想知道是否有任何方法来优化它的效率和长度?

速度比较:(对于大小为10.000的字符串数组,在10.000上运行的平均时间)

  1. Using my code:

    • 1259 ms
  2. Using Habib's code: Array.FindIndex<string>(item, r => r.Contains(TextToLookUp));

    • 0906 ms

字符串数组:搜索文本,返回第一次出现的行号

您当前的解决方案看起来不错。你可以用return m;代替return m++

如果你想缩短你的代码,你可以使用Array.FindIndex<T>:

public static int LookUpLineNumber(String[] item, string TextToLookUp)
{
    return Array.FindIndex<string>(item, r => r.Contains(TextToLookUp));
}

不确定它是否会给你带来任何性能提升。

如果您需要多次执行此操作,那么从数组中构建后缀树将是最快的方法:

http://en.wikipedia.org/wiki/Suffix_tree

然而,如果你不重用数组,那么我认为你的方法可能是最快的,不使用正则表达式来做包含,如果正则表达式是预编译的,可能会更快。

您还可以这样做:-

Array.FindIndex(item,i=>i.Contains(TextToLookUp));

即使没有排序,上面的操作也可以工作。

以上可以通过使用IndexOf操作而不是Contains并传递StringComparison.OrdinalIgnoreCase来进一步优化。然后你需要将它与0进行比较。