2013-01-09 53 views
0

對於將枚舉列表(其中枚舉從int繼承而來)轉換爲整數數組,將會有什麼最高性能解決方案?在C#中將IEnumerable <enum:int>轉換或複製爲int []的性能最高的解決方案是什麼?

+1

你在用什麼語言? –

+2

請下一次避免在您的問題中使用「最好」 - 在大多數情況下,沒有辦法知道你想要什麼 - 最優雅的代碼,最快的可能性,最可靠的代碼,最短的代碼,最酷的代碼,最少的內存使用... –

+0

問題標題和問題編輯每個反饋。 – theBoringCoder

回答

6

既然你沒有指定你正在使用的語言,我猜你正在使用C#。我還假設你在談論的枚舉,而不是可枚舉:

var array = enums.Select(e => (int)e).ToArray(); 
+0

這就是你的來源「List 」。 –

3

這是不可能在一般的「轉換」的List<anything>到一個數組。可以生成一個新的數組,其內容使用基於列表內容的值進行初始化。這與例如將List<T>轉換爲ReadOnlyCollection<T>,其產生原始數據的只讀「實時」視圖。這種區別很重要,因爲在後一種情況下,結果數組將保持「附着」到提供初始化數據的對象,而在前一種情況下,它將被分離。

使用Array.Copy方法可以將數據從枚舉類型的數組複製到基礎整數類型的數組。您最好的選擇可能是使用ToArrayList<someEnum>轉換爲someEnum[],然後使用Array.Copy將數據從int[](或long[]或其他適當的類型)中複製。雖然這需要複製數組兩次,但通常情況下,批量複製數組元素所需的時間遠遠少於單獨處理元素的時間。

+1

+1用於術語修正。 – nawfal

1

最具表現力的是您自己運行for循環。

static int[] Array(List<MyEnum> list) 
{ 
    var array = new int[list.Count]; 
    for (int i = 0; i < array.Length; i++) 
     array[i] = (int)list[i]; 

    return array; 
} 

可以使整個事情短,在System.LinqCast<T>擴展方法。這會導致拳擊,並不會成爲最高性能。

var array = list.Cast<int>().ToArray(); 

Justin的是考慮可讀性/速度折衷的最佳解決方案。

相關問題