2010-10-24 37 views
0

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

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

感谢,

PM

+0

为什么你想避免一个循环?任何现有的方法都将在内部使用循环。 – winwaed 2010-10-24 18:20:41

回答

0

如果您正在使用LinkedList集合类(从System.Collections.Generic),你可以使用LINQ获得它:

var myArray = list.Take(20).ToArray(); 
6

使用LINQ?

myLinkedList.Take(20).ToArray() 

myLinkedList.Skip(5).Take(20).ToArray() 
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的方法更有效,也因为它创建阵列是刚开始的时候大小恰到好处。是的,它使用循环 - 但正如我所说,东西的到了。

+0

我不介意内部循环,我在通过链表列表方法时错过了Take方法。我陷入了精选,这真的不是我需要的。 – user472875 2010-10-24 18:26:39