gpt4 book ai didi

algorithm - C# 4.0,确定字符串长度是否最有效的方法!= 0?第2部分

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:33:08 25 4
gpt4 key购买 nike

(抱歉,这是 Most efficient way to determine if a string length != 0? 的第二篇帖子,但我不知道如何回复人们的回答,我的回复被发布为“答案”)

理想情况下,我正在寻找的是执行以下操作(将被调用 1 亿次以上)的最有效算法。我正在使用 C# 4.0

转动字符串:“A B C D E”进入数组:字符串["A","B","C","D","E"]

我的算法如下:

public string[] SplitOnMultiSpaces(string text)
{
if (string.IsNullOrEmpty(text)) return new string[0];

var split = text.Split(' ');
int length = split.Length;

var data = new string[length];

int index = 0;
for (int i = 0; i<length; i++)
{
if (split[i].Length != 0)
{
data[index++] = split[i];
}
}

return data;
}

我的问题是当我针对 100,000 个字符串分析它时,执行需要 1.04 秒。

如果我注释掉“if (split[i].Length != 0)”检查,它只需要 0.2 秒。

谁能告诉我为什么针对字符串的这个(简单)查询占用了总执行时间的 80%? (特别是,因为我预计其他领域会使用更多 CPU)我想出的唯一想法是 C# 试图计算字符串长度,人们告诉我情况并非如此(我猜它更像是 VB 字符串?)。但这对于时间开销来说没有意义。

我考虑过尝试查看 split[i][0] 是否存在,但依赖异常会减慢 WAAAAAAY 的速度。

附言-- 我的算法也有问题,因为返回的数组通常比需要的更大,但这似乎并没有太大的开销。

最佳答案

可能比您能做的更快或更快(无需进入较低级别的代码,也就是 C/C++)。

// somewhere else
private static readonly char[] splitter = new []{' '} ;

//
public string[] SplitOnMultiSpaces(string text)
{
return text.Split(splitter, StringSplitOptions.RemoveEmptyEntries );
}

关于algorithm - C# 4.0,确定字符串长度是否最有效的方法!= 0?第2部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3390685/

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