将字符串数组转换为双数组的最快方法?

Chi*_*ata 15 .net c# linq

我最近不得不处理大型字符串数组到数字数组的转换,我想知道最快的方法是什么.

起初我采纳了:

double[] doubles = sarray.Split(',').Select(Double.Parse).ToArray();
Run Code Online (Sandbox Code Playgroud)

...这真的很甜 ......但是今天,我决定切换回一个简单的for循环,将数组中的所有字符串解析为Double,并且不太令人惊讶的是,基准测试似乎偏向于for循环..所以我应该切换回来一个基本的循环?

另外,我想知道是否有更好的类型可用于存储分割字符串,例如HashSet在转换过程中可能表现更好?

SLa*_*aks 42

Array.ConvertAll(sarray.Split(','), Double.Parse);
Run Code Online (Sandbox Code Playgroud)

与LINQ不同.ToArray(),这预先分配了一个正确大小的数组,并且不进行任何大小调整.
这应该与手卷循环无法区分.

  • 这会比`for`循环更快吗? (2认同)
  • 哇!我总是忘了Array类!这太棒了。谢谢!! (2认同)

Jro*_*onk 14

我用的时候:

double[] doubles = Array.ConvertAll(sarray.split(','), Double.Parse);
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

无法从用法中推断出方法'System.Array.ConvertAll(TInput [],System.Converter)'的类型参数.尝试显式指定类型参数.

但是当我这样做时它起作用了:

double[] doubles = Array.ConvertAll(sarray.split(','), new Converter<string, double>(Double.Parse));
Run Code Online (Sandbox Code Playgroud)