這是從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