C#链接列表

时间:2010-10-24 18:18:29

标签: c# linked-list

非常基本的问题,但是对于c#链接列表是否有任何类似ToArray的函数,它将返回链表中仅部分元素的数组。

例如:假设我的列表有50个项目,我需要一个只有前20个的数组。我真的想避免循环。

谢谢,

PM

3 个答案:

答案 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();