字符串数组:搜索文本,返回第一次出现的行号
本文关键字:第一次 返回 数组 搜索 文本 字符串 | 更新日期: 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上运行的平均时间)
Using my code:
- 1259 ms
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进行比较。