Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fastest way to convert string array to double array?

Tags:

c#

.net

linq

I've been having to deal lately with conversion of large string arrays to number arrays and I'm wondering what the fastest method out there for this really is.

At first I adopted:

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

...which is really sweet... But today, I decided to switch back to a simple for loop to parse all strings in array to Double and not too surprisingly the benchmark seemed to favour the for loop.. so should I switch back to a basic for loop?

Also, I want to know if there's a better type that can be used to store the splitted strings e.g. HashSet which may perform better during this conversion?

like image 659
Chibueze Opata Avatar asked Mar 01 '12 21:03

Chibueze Opata


2 Answers

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

Unlike LINQ's .ToArray(), this pre-allocates a correctly-sized array and doesn't do any resizing.
This should be indistinguishable from a hand-rolled loop.

like image 70
SLaks Avatar answered Oct 14 '22 00:10

SLaks


When I used:

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

I got this error:

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

But it worked when I did this:

double[] doubles = Array.ConvertAll(sarray.split(','), new Converter<string, double>(Double.Parse));
like image 22
Jroonk Avatar answered Oct 14 '22 02:10

Jroonk