2012-03-01 17 views
15

Ho dovuto trattare ultimamente con la conversione di array di stringhe di grandi dimensioni in array di numeri e mi chiedo quale sia il metodo più veloce là fuori per questo.Il modo più veloce per convertire l'array di stringhe in doppio array?

In un primo momento ho adottato:

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

... che è davvero dolce ... Ma oggi, ho deciso di tornare a un semplice ciclo for per analizzare tutte le stringhe in array per raddoppiare e non troppo sorprendentemente il benchmark sembrava favorire il ciclo for .. quindi dovrei tornare ad un ciclo di base?

Inoltre, voglio sapere se esiste un tipo migliore che può essere utilizzato per memorizzare le stringhe suddivise, ad es. HashSet che potrebbe funzionare meglio durante questa conversione?

+3

Un semplice ciclo sarà sempre fuori eseguire un Query Linq. – kprobst

+1

Il titolo dice int ma nel codice che stai usando doppio. Cos'è questo? – cadrell0

+0

scusa, non so se sono solo io ma ho questo problema di pensare ai numeri come * int. :) –

risposta

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

differenza LINQ di .ToArray(), questa pre-alloca un array di dimensioni corrette e non fa alcun ridimensionamento.
Questo dovrebbe essere indistinguibile da un cappio arrotolato a mano.

+2

Questo sarebbe più veloce del ciclo 'for'? –

+1

Wow! Mi dimentico sempre della classe Array! È stato fantastico. Grazie!! –

14

quando ho usato:

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

ho ottenuto questo errore:

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

ma ha funzionato quando ho fatto questo:

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