2012-03-01 95 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));