gpt4 book ai didi

C#循环遍历字符数组效率不高

转载 作者:行者123 更新时间:2023-11-30 19:46:09 37 4
gpt4 key购买 nike

我在下面有这段代码,我在其中循环遍历字符串并逐个字符地比较所有内容,这是一个非常缓慢的过程,我想知道如何改进这段代码。

        //delete anti-xss junk ")]}'\n" (5 chars);
if (trim)
{
googlejson = googlejson.Substring(5);
}

//pass through result and turn empty elements into nulls
//echo strlen( $googlejson ) . '<br>';
bool instring = false;
bool inescape = false;
string lastchar = "";
string output = "";
for ( int x=0; x< googlejson.Length; x++ ) {

string ch = googlejson.Substring(x, 1);

//toss unnecessary whitespace
if ( !instring && ( Regex.IsMatch(ch, @"/\s/"))) {
continue;
}

//handle strings
if ( instring ) {
if (inescape) {
output += ch;
inescape = false;
} else if ( ch == "\\" ) {
output += ch;
inescape = true;
} else if ( ch == "\"") {
output += ch;
instring = false;
} else {
output += ch;
}
lastchar = ch;
continue;
}


switch ( ch ) {

case "\"":
output += ch;
instring = true;
break;

case ",":
if ( lastchar == "," || lastchar == "[" || lastchar == "{" ) {
output += "null";
}
output += ch;
break;
case "]":
case "}":
if ( lastchar == "," ) {
output += "null";
}
output += ch;
break;

default:
output += ch;
break;
}
lastchar = ch;
}
return output;

这真是太棒了。

我更改了以下 2 行并获得了惊人的性能提升,例如 1000% 或其他

首先改变这个

string ch = googlejson.Substring(x, 1);

对那个

string ch = googlejson[x].ToString();

其次,我用 String Builder 替换了所有 += ch

output.Append(ch);

因此这 2 项更改具有最大的性能影响。

最佳答案

首先,当只处理单个字符时,不应该使用 Substring。使用

char ch = googlejson[x];

相反。

您还可以考虑为您的output 变量使用StringBuilder。如果您正在使用字符串,您应该始终牢记,字符串在 .NET 中是不可变的,因此对于每个

output += ch;

创建了一个新的字符串实例。

使用

StringBuilder output = new StringBuilder();

output.append(ch);

相反。

关于C#循环遍历字符数组效率不高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9126390/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com