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

时间:2014-03-21 17:12:44

标签: c# arrays line-numbers

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

这是有效的;

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. 使用我的代码:

    • 1,259ms
  2. 使用Habib的代码:Array.FindIndex<string>(item, r => r.Contains(TextToLookUp));

    • 0,906ms

3 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

如果您需要多次执行此操作,则从阵列构建的后缀树将是最快的方法:

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

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

答案 2 :(得分:0)

您还可以执行以下操作: -

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

即使没有排序,上述内容也会有效。

使用IndexOf操作代替Contains并传递StringComparison.OrdinalIgnoreCase,可以进一步优化上述操作。然后你必须将它与0进行比较。