这是从some other question的讨论衍生出来的。解析无字符串拆分
假设我必须解析大量很长的字符串。每个字符串都包含一个由空格分隔的double
(当然用文本表示)的序列。我需要将double
解析为List<double>
。
标准解析技术(使用string.Split
+ double.TryParse
)似乎很慢:对于每个数字我们需要分配一个字符串。
我试图使它成为类似于C的方式:计算包含数字的子串的开始和结束的索引,并将其解析为“到位”,而不创建额外的字符串。 (见http://ideone.com/Op6h0,如下图所示的相关部分。)
int startIdx, endIdx = 0;
while(true)
{
startIdx = endIdx;
// no find_first_not_of in C#
while (startIdx < s.Length && s[startIdx] == ' ') startIdx++;
if (startIdx == s.Length) break;
endIdx = s.IndexOf(' ', startIdx);
if (endIdx == -1) endIdx = s.Length;
// how to extract a double here?
}
还有就是string.IndexOf
过载,只有一个给定的字符串中进行搜索,但我没能找到解析从子双重方法,实际上并没有提取那子串第一。
有没有人有想法?
你有没有证明了这其实是一个瓶颈?我不知道*以任何方式做副手,但我肯定希望有一些证据表明这是微型优化之前的问题。 – 2012-04-15 11:22:29
@Jon:不是。这个问题是基于链接问题的讨论(http://stackoverflow.com/questions/10053449/extract-numbers-from-string)。对不起。 – Vlad 2012-04-15 11:23:13
够公平的。我怀疑手写的解析程序会比BCL团队提出的大概经过优化的大量体验方法要慢:) – 2012-04-15 11:25:23