非常基本的问题,但是对于c#链接列表是否有任何类似ToArray的函数,它将返回链表中仅部分元素的数组。
例如:假设我的列表有50个项目,我需要一个只有前20个的数组。我真的想避免循环。
谢谢,
PM
答案 0 :(得分:6)
使用Linq?
myLinkedList.Take(20).ToArray()
或
myLinkedList.Skip(5).Take(20).ToArray()
答案 1 :(得分:4)
你说你“真的想避免循环” - 为什么?
如果你使用的是.NET 3.5(或拥有LINQBridge),那真的很容易:
var array = list.Take(20).ToArray();
......但显然必须在内部循环。
请注意,如果原始链接列表少于20个元素,则会创建一个较小的数组。目前还不清楚这是否是你想要的。
某些东西将不得不在内部循环,迟早 - 它不会像将要用于“导航此链接列表并将固定数量的指针复制到新的指令中的专用CPU指令”阵”。所以问题是你是做它还是库方法。
如果您不能使用LINQ,那么自己编写等效代码非常容易:
int size = Math.Min(list.Count, 20);
MyType[] array = new MyType[size];
var node = list.First;
for (int i = 0; i < size; i++)
{
array[i] = node.Value;
node = node.Next;
}
实际上,这也会比LINQ方法稍微有效一些,因为它创建的数组恰好是开始时的正确大小。是的,它使用一个循环 - 但正如我所说,某些东西得到了。
答案 2 :(得分:0)
如果你正在使用LinkedList
集合类(来自System.Collections.Generic
),你可以使用LINQ来获取它:
var myArray = list.Take(20).ToArray();