从 List<T> 到数组 T[] 的转换
Posted
技术标签:
【中文标题】从 List<T> 到数组 T[] 的转换【英文标题】:Conversion from List<T> to array T[] 【发布时间】:2009-03-10 07:13:48 【问题描述】:有没有一种将强类型的List<T>
转换为相同类型的数组的捷径,例如:List<MyClass>
到MyClass[]
?
我的意思是一个方法调用,或者至少短于:
MyClass[] myArray = new MyClass[list.Count];
int i = 0;
foreach (MyClass myClass in list)
myArray[i++] = myClass;
【问题讨论】:
【参考方案1】:尝试使用
MyClass[] myArray = list.ToArray();
【讨论】:
这是一个浅拷贝,对吗?从docs不清楚...【参考方案2】:List<int> list = new List<int>();
int[] intList = list.ToArray();
这是你的解决方案吗?
【讨论】:
【参考方案3】:在List<T>
上使用ToArray()
。
【讨论】:
【参考方案4】:list.ToArray()
会做的。详情请见here。
【讨论】:
【参考方案5】:你可以简单地使用ToArray()
扩展方法
例子:
Person p1 = new Person() Name = "Person 1", Age = 27 ;
Person p2 = new Person() Name = "Person 2", Age = 31 ;
List<Person> people = new List<Person> p1, p2 ;
var array = people.ToArray();
According to Docs
使用
Array.Copy()
复制元素,这是一个O(n)操作, 其中 n 是计数。
【讨论】:
【参考方案6】:一种可能的避免解决方案,它使用多个 CPU 内核并预计运行速度会更快,但它的执行速度却慢了大约 5 倍:
list.AsParallel().ToArray();
【讨论】:
【参考方案7】:使用 HPCsharp nuget 包提供的多个处理器内核将速度提高一倍:
list.ToArrayPar();
【讨论】:
以上是关于从 List<T> 到数组 T[] 的转换的主要内容,如果未能解决你的问题,请参考以下文章
为啥 List<T> 的“索引超出范围”异常,但数组却没有?
如何从 WebFlux 中的 Mono<List<T>> 中提取内容以将其传递到调用链中