對於將枚舉列表(其中枚舉從int繼承而來)轉換爲整數數組,將會有什麼最高性能解決方案?在C#中將IEnumerable <enum:int>轉換或複製爲int []的性能最高的解決方案是什麼?
回答
既然你沒有指定你正在使用的語言,我猜你正在使用C#。我還假設你在談論的枚舉,而不是可枚舉:
var array = enums.Select(e => (int)e).ToArray();
這就是你的來源「List
這是不可能在一般的「轉換」的List<anything>
到一個數組。可以生成一個新的數組,其內容使用基於列表內容的值進行初始化。這與例如將List<T>
轉換爲ReadOnlyCollection<T>
,其產生原始數據的只讀「實時」視圖。這種區別很重要,因爲在後一種情況下,結果數組將保持「附着」到提供初始化數據的對象,而在前一種情況下,它將被分離。
使用Array.Copy
方法可以將數據從枚舉類型的數組複製到基礎整數類型的數組。您最好的選擇可能是使用ToArray
將List<someEnum>
轉換爲someEnum[]
,然後使用Array.Copy
將數據從int[]
(或long[]
或其他適當的類型)中複製。雖然這需要複製數組兩次,但通常情況下,批量複製數組元素所需的時間遠遠少於單獨處理元素的時間。
+1用於術語修正。 – nawfal
最具表現力的是您自己運行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.Linq
Cast<T>
擴展方法。這會導致拳擊,並不會成爲最高性能。
var array = list.Cast<int>().ToArray();
Justin的是考慮可讀性/速度折衷的最佳解決方案。
- 1. 將IEnumerable <int>轉換爲int []
- 2. 將DateTime轉換爲Int格式的最高性能方法
- 3. 在Linq中將Dictionary <int,Dictionary <int, Foo>>轉換爲IEnumerable <IEnumerable <Foo>>的最簡單方法是什麼?
- 4. c中的高性能位圖繪製解決方案#
- 5. GPU性能請求,什麼是最佳解決方案?
- 6. 什麼是可能的解決方案
- 7. 在C#中將RichTextFormat信息轉換爲HTML的最佳解決方案是什麼?
- 8. 聲納:複製/高可用性或羣集解決方案
- 9. 轉換文件的最佳文件解析解決方案是什麼?
- 10. 將此迭代解決方案轉換爲功能解決方案
- 11. C# - 將多項目解決方案轉換爲1-1項目解決方案
- 12. 將ByteString轉換爲Int的最佳方式是什麼?
- 13. 將IEnumerable <T>轉換爲Datatable for SQL批量複製的最佳方法
- 14. 什麼是最好的圖像轉碼庫/解決方案?
- 15. 將VS2012解決方案轉換爲VS2010
- 16. 將CSV轉換爲JSON解決方案
- 17. 將數據行[]轉換爲列表<int>的最佳方式是什麼?
- 18. Java =什麼是向下轉換的替代品/解決方案?
- 19. 在c#中查詢的LINQ解決方案是什麼?
- 20. Jenkins CI常用的高可用性/故障切換解決方案是什麼?
- 21. 將json對象轉換爲HTML的最佳解決方案
- 22. 將java.util.List轉換爲Scala列表的最佳解決方案
- 23. 性能的解決方案
- 24. 什麼是POS應用程序的最佳解決方案?
- 25. 將必要的解決方案轉換爲併發映射解決方案
- 26. 如何將IEnumerable <IEnumerable <IGrouping <int,string> >>轉換爲IEnumerable <IEnumerable <string>>
- 27. 什麼是最有效的JavaScript語法檢查解決方案?
- 28. 將函數Func <IList, int>轉換爲Func <IEnumerable,int>?方法
- 29. ,這是什麼工廠方法的最佳解決方案
- 30. 爲什麼C#將double轉換爲int?
你在用什麼語言? –
請下一次避免在您的問題中使用「最好」 - 在大多數情況下,沒有辦法知道你想要什麼 - 最優雅的代碼,最快的可能性,最可靠的代碼,最短的代碼,最酷的代碼,最少的內存使用... –
問題標題和問題編輯每個反饋。 – theBoringCoder