在我的字符串数组中,我想查找一些文本并将第一次出现的行号作为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)
使用我的代码:
使用Habib的代码:Array.FindIndex<string>(item, r => r.Contains(TextToLookUp));
答案 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进行比较。