Przetwarzaj bez podziału łańcucha
To spin-off z dyskusji winne pytanie.
Przypuśćmy, że muszę przeanalizować ogromną liczbę bardzo długich łańcuchów. Każdy ciąg zawiera sekwencjędouble
s (oczywiście w reprezentacji tekstu) oddzielone białymi znakami. Muszę przeanalizowaćdouble
s doList<double>
.
Standardowa technika parsowania (przy użyciustring.Split
+ double.TryParse
) wydaje się być dość powolny: dla każdej liczby musimy przydzielić ciąg.
Próbowałem uczynić go starym sposobem podobnym do C: obliczyć indeksy początku i końca podciągów zawierających liczby i przeanalizować je „na miejscu”, bez tworzenia dodatkowego ciągu. (Widziećhttp://ideone.com/Op6h0, poniżej pokazano odpowiednią część.)
<code>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? } </code>
Jest przeciążeniestring.IndexOf
, przeszukując tylko podany podłańcuch, ale nie udało mi się znaleźć metody parsowania podwojnego podłańcucha, bez wcześniejszego wyodrębnienia tego podciągu.
Czy ktoś ma pomysł?