2012-03-01 18 views
15

He tenido que lidiar últimamente con la conversión de grandes matrices de cadenas a matrices numéricas y me pregunto cuál es el método más rápido para esto realmente.¿La forma más rápida de convertir una matriz de cadenas en una matriz doble?

Al principio adoptó:

double[] doubles = sarray.Split(',').Select(Double.Parse).ToArray(); 

... que es realmente dulce ... Pero hoy, he decidido volver a un simple bucle for para analizar todas las cadenas en orden a doble y no es demasiado sorprendente que el punto de referencia parezca favorecer el bucle for ... ¿así que debería volver a un ciclo for for básico?

Además, deseo saber si hay un tipo mejor que se pueda usar para almacenar las cadenas divididas, p. HashSet que puede funcionar mejor durante esta conversión?

+3

Un bucle simple se hará siempre superar el rendimiento de una Consulta Linq. – kprobst

+1

El título dice int pero en el código que está utilizando doble. ¿Cuál es? – cadrell0

+0

lo siento, no sé si soy solo yo, pero tengo este problema de pensar en los números como * int. :) –

Respuesta

35
Array.ConvertAll(sarray.Split(','), Double.Parse); 

A diferencia de LINQ .ToArray(), este pre-asigna una matriz del tamaño adecuado y no hace ningún cambio de tamaño.
Esto debería ser indistinguible de un lazo enrollado a mano.

+2

¿Sería esto más rápido que el bucle 'for'? –

+1

¡Guau! ¡Siempre me olvido de la clase Array! Eso fue asombroso. ¡¡Gracias!! –

14

cuando utilicé:

double[] doubles = Array.ConvertAll(sarray.split(','), Double.Parse); 

me dio este mensaje:

The type arguments for method 'System.Array.ConvertAll(TInput[], System.Converter)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

pero funcionó cuando hice esto:

double[] doubles = Array.ConvertAll(sarray.split(','), new Converter<string, double>(Double.Parse)); 
Cuestiones relacionadas