Este es un spin-off de la discusión en some other question.Parse sin string split
Supongamos que tengo que analizar una gran cantidad de cadenas muy largas. Cada cadena contiene una secuencia de double
s (en representación de texto, por supuesto) separados por espacios en blanco. Necesito analizar el double
s en un List<double>
.
La técnica de análisis estándar (usando string.Split
+ double.TryParse
) parece ser bastante lenta: para cada uno de los números debemos asignar una cadena.
Intenté hacer una vieja forma de C: calcule los índices del comienzo y el final de las subcadenas que contienen los números, y analícelos "en su lugar", sin crear cadenas adicionales. (Ver http://ideone.com/Op6h0, a continuación se muestra la parte correspondiente.)
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?
}
Hay una sobrecarga de string.IndexOf
, buscando sólo dentro de una subcadena dada, pero no pude encontrar un método para analizar un doblete de subcadena, sin tener que extraer que subcadena primero.
¿Alguien tiene una idea?
¿ha demostrado que esto es en realidad un cuello de botella? No sé * de ninguna manera de hacerlo fuera de la mano, pero ciertamente quiero alguna evidencia de que sea un problema antes de la micro-optimización. –
@Jon: en realidad no. La pregunta se basa en la discusión en la pregunta vinculada (http://stackoverflow.com/questions/10053449/extract-numbers-from-string). Lo siento por eso. – Vlad
Bastante justo. Sospecho que una rutina de análisis escrita a mano sería más lenta que el método presumiblemente optimizado con mucha experiencia que el equipo de BCL ha ideado :) –