Dies ist ein Spin-off aus der Diskussion in some other question.Parse ohne String Split
Angenommen, ich muss eine große Anzahl sehr langer Strings parsen. Jede Zeichenfolge enthält eine Sequenz von double
s (natürlich in Textdarstellung), die durch Leerzeichen voneinander getrennt sind. Ich muss die double
s in eine List<double>
analysieren.
Die Standard-Analyse-Technik (mit string.Split
+ double.TryParse
) scheint ziemlich langsam zu sein: für jede der Zahlen müssen wir eine Zeichenfolge zuordnen.
Ich habe versucht, es zu einem alten C-ähnlichen Weg zu machen: Berechne die Indizes des Anfangs und des Endes von Teilstrings, die die Zahlen enthalten, und analysiere sie "an Ort und Stelle", ohne zusätzliche Zeichenketten zu erzeugen. (Siehe http://ideone.com/Op6h0, unter dem relevanten Teil gezeigt.)
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?
}
Es gibt eine Überlastung von string.IndexOf
, nur innerhalb eines bestimmten Teilzeichens gesucht, aber ich konnte keine Methode finden, um eine Doppel von Teilzeichenfolge Parsen, ohne tatsächlich zu extrahieren, dass Teilzeichenfolge zuerst.
Hat jemand eine Idee?
Haben Sie erwies sich dies tatsächlich ein Engpass? Ich weiß nicht, wie ich das machen könnte, aber ich würde sicherlich einige Beweise dafür haben, dass es ein Problem vor der Mikrooptimierung ist. –
@ Jon: nicht wirklich. Die Frage basiert auf der Diskussion der verknüpften Frage (http://stackoverflow.com/questions/10053449/extract-numbers-from-string). Das tut mir leid. – Vlad
Fair genug. Ich vermute, dass eine handgeschriebene Parser-Routine langsamer wäre als die vom BCL-Team ersonnene Methode der vermutlich-optimierten-mit-vielen-Erfahrungen :) –