gpt4 book ai didi

c# - 如何以更有效的方式编写排序?

转载 作者:太空狗 更新时间:2023-10-30 01:31:47 25 4
gpt4 key购买 nike

我有一个项目,我必须编写一个尽可能快地运行的高效代码,但我缺乏相关知识,所以...

所以我有一个使用 Entity Framework 的 asp.net(MVC) 项目,而且我还必须使用 Web 服务从中获取有关详细信息的信息。首先,我向 Web 服务发出请求,并以一个长字符串作为响应,我必须在字符串列表中对其进行解析以进行进一步的事件。

我这样解析这个字符串:

string resultString;
char[] delimiterChars = { ',', ':', '"', '}', '{' };
List<string> words = resultString.Split(delimiterChars).ToList();

从这里我有很多行的列表,其中有信息和很多垃圾行,看起来像这样:

list of strings

我决定从垃圾信息中清除此列表,以免在进一步的方法中使用它,并且不使用 ifs 等检查此行:

for (int i = words.Count - 1; i >= 0; i--)
{
if (words[i] == "" || words[i] == "data" || words[i] == "array") words.RemoveAt(i);
}

在此之后我得到了清晰的列表,但是每个小数,如价格、尺寸等都被 , 分隔,所以如果我的列表中有价格 21,55,它现在看起来像 2 个元素21 和 55。我不能只从分隔符中删除 ,,因为我作为 Web 服务的响应获得的字符串主要通过放置 , 来分隔信息。

所以我决定将十进制数字粘回去(在此 block 列表元素之前看起来像:1)attrValue 2)21 3)55 之后像:1)attrValue 2)21.55):

 for (int i = 0; i < words.Count(); i++)
{
if (words[i] == "attrValue")
{
try
{
var seconPartInt = Int32.Parse(words[i + 2]);
words[i + 1] += "." + words[i + 2];
}
catch { }
}
if (words[i].Contains("\\/")) words[i].Replace("\\/", "/");
}

一切正常,列表已排序,小数点已收集,但速度降低了 30%。在使用秒表和注释代码块进行了一些测试之后,很明显上面的代码大大降低了整个程序的速度......

总结一下:我不能使用那个慢代码,同时不知道如何让它工作得更快。可能问题是我将字符串转换为 int 以便检查列表中的下一个元素是否是我的数字的第二部分。

如何优化我的代码?

最佳答案

您应该做的第一件事是使用此版本的 Split 以避免出现空条目 (https://msdn.microsoft.com/en-us/library/ms131448(v=vs.110).aspx)。

List<string> words = resultString.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries)
.ToList();

此外,如果您知道“数据”和“数组”在字符串中并且您不想使用它们,请在拆分字符串之前将它们替换为空格。

resultString = resultString.Replace("data", String.Empty)
.Replace("array", String.Empty);

我不明白的是,逗号如何既可以作为字段分隔符又可以作为有意义的字符,以及您如何知道两者之间的区别(即 25,50 应该是单个值还是两个值)。

关于c# - 如何以更有效的方式编写排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39619419/

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