用于铸造或复制IEnumerable<;enum:int>;到C#中的int[]
本文关键字:int gt 中的 IEnumerable 复制 lt enum 用于 | 更新日期: 2023-09-27 17:51:05
将枚举的List(其中枚举从int继承(强制转换或复制到整数数组的最具性能的解决方案是什么?
由于您没有指定使用的语言,我猜您使用的是C#。我还假设你说的是枚举,而不是枚举:
var array = enums.Select(e => (int)e).ToArray();
通常不可能将List<anything>
"转换"为数组。可以生成一个新数组,该数组的内容用基于列表内容的值进行初始化。这与例如将List<T>
转换为ReadOnlyCollection<T>
不同,后者生成原始数据的只读"实时"视图。这种区别很重要,因为在后一种情况下,生成的数组将保持"附加"到提供初始化数据的对象,而在前一种情况中,它将被分离。
可以使用Array.Copy
方法将数据从枚举类型的数组复制到基础整数类型的数组。您的最佳选择可能是使用ToArray
将List<someEnum>
转换为someEnum[]
,然后使用Array.Copy
将其中的数据复制到int[]
(或long[]
,或任何合适的类型(。尽管这需要复制两次数组,但通常大容量复制数组元素所需的时间将大大少于单独处理元素所需时间。
最理想的方法是自己运行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是考虑可读性/速度权衡的最佳解决方案。