18

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?

pnuts
  • 58,317
  • 11
  • 87
  • 139
Chibueze Opata
  • 9,856
  • 7
  • 42
  • 65

2 Answers2

50
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.

SLaks
  • 868,454
  • 176
  • 1,908
  • 1,964
14

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));
Jroonk
  • 1,376
  • 1
  • 9
  • 12