2012-03-01 102 views
15

我一直不得不处理大型字符串数组到数组的转换,我想知道最快的方法是什么。将字符串数组转换为双数组的最快方法?

起初我通过:

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

...这实在是 ...但是今天,我决定切换回一个简单的for循环来分析所有字符串数组将翻一番,不要太奇怪,基准似乎赞成for循环..所以我应该切换回基本的循环?

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

+3

一个简单的循环会一直出执行Linq查询。 – kprobst 2012-03-01 21:51:46

+1

标题说int,但在你使用的代码中加倍。这是什么? – cadrell0 2012-03-01 21:56:25

+0

对不起,我不知道这是否只有我,但我有这个问题的思想数字为* int。 :) – 2012-03-01 21:59:21

回答

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

与LINQ的.ToArray(),这个预先分配正确大小的数组,并没有做任何调整大小。
这应该与手卷循环无法区分。

+2

这会比'for'循环更快吗? – 2012-03-01 21:54:15

+1

哇!我总是忘记Array类!这太棒了。谢谢!! – 2012-03-01 21:55:12

14

当我用:

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

我得到这个错误:

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

但它的工作我这样做的时候:

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