C# 使用搜索词查找数据的更快方法?

C# 使用搜索词查找数据的更快方法?,c#,visual-studio-2010,list,methods,arrays,C#,Visual Studio 2010,List,Methods,Arrays,我需要搜索一个字符串数组来查找“Parameters Table”的每个匹配项,在每个“Parameters Table”和下一个“Parameters Table”之间,从指定的索引(保持不变)中获取另一个字符串。我一直这样做: public List<string> findlistOfNames(string[] arrayToLookForNames) { List<string> listOfNames = new List<string>(

我需要搜索一个字符串数组来查找“Parameters Table”的每个匹配项,在每个“Parameters Table”和下一个“Parameters Table”之间,从指定的索引(保持不变)中获取另一个字符串。我一直这样做:

public List<string> findlistOfNames(string[] arrayToLookForNames)
{
    List<string> listOfNames = new List<string>();

    const string separator = "Parameters Table"; //This is the string I am searching for

    var cuttedWords = arrayToLookForNames.SkipWhile(x => x != separator).Skip(1);

    while (cuttedWords.Any())
    {
        var variable = cuttedWords.TakeWhile(x => x != separator).ToArray();
        cuttedWords = cuttedWords.Skip(variable.Length + 1);
        listOfNames.Add(variable[2]); //This (always index 2) needs to be added to the list
    }
    return listOfNames;
}
公共列表findlistOfNames(字符串[]arrayToLookForNames)
{
List listOfNames=新列表();
const string separator=“Parameters Table”;//这是我正在搜索的字符串
var cuttedWords=arrayToLookForNames.SkipWhile(x=>x!=分隔符).Skip(1);
while(cuttedWords.Any())
{
var变量=cuttedWords.TakeWhile(x=>x!=分隔符).ToArray();
cuttedWords=cuttedWords.Skip(variable.Length+1);
listOfNames.Add(变量[2]);//需要将此(始终为索引2)添加到列表中
}
返回名称列表;
}
这个速度很慢。有更好的方法吗

编辑:下面是
字符串[]arrayToLookForNames
的一段代码:

参数表

0

41

气压

hPa

AFD2

记录

参数表

0

42

气压设定

汞柱


鉴于您尚未指定在以下情况下会发生什么:

Parameters TableewfihweifhweParameters TableihwefwihewfParameters Table
看起来您的代码a)目前运行正常,b)您正在寻求改进。一般来说,这些问题对这个网站来说太过武断,但你可能会在网站上找到更好的运气。事实就是这样。我会查出来的,谢谢。在你的帖子之前(如果你这样做的话),至少添加一个你正在传递到函数中的数据的例子。使用
Take
/
Skip
/
TaksWhile
/
SkipWhile
会使整个过程变得非常低效。您应该改用indexer access。这个问题似乎与主题无关,因为它被交叉发布在ArrayTookForNames中。如果您是这样问的,ArrayTookForNames中将多次出现“Parameters Table”?@user2340818在这种情况下,您的问题没有正确指定。。。我上面例子中的匹配是什么?啊,我看到了问题。请参阅我的操作中的编辑。编辑中的示例将返回名称列表,其中包含:巴罗压力,巴罗压力Setting@user2340818:我真的不明白,但我提供了一个可能对您有用的变体。
var regex = new Regex(@"(?<=Parameters Table).*?(?=(?:Parameters Table)|$)");
IEnumerable<string> foundValues = 
            arrayToLookForNames.SelectMany(x => regex.Matches(x))
                   .Where(m => m.Success)
                   .Select(m => m.Value);
var regex = new Regex(@"(?<=Parameters Table).*?(?=(?:Parameters Table)|$)",
                      RegexOptions.Singleline);
var vals = arrayToLookForNames
               .SelectMany(x=>regex.Matches(x).Cast<Match>())
               .Where(m=>m.Success)
               .Select(m=>m.Value);