非常基本的问题,但是有没有类似ToArray的函数用于c#链接列表,它将返回链表中仅有部分元素的数组。C#链表
例如:假设我的列表中有50个项目,我需要一个只有前20个数组的数组。我真的希望避免for循环。
感谢,
PM
非常基本的问题,但是有没有类似ToArray的函数用于c#链接列表,它将返回链表中仅有部分元素的数组。C#链表
例如:假设我的列表中有50个项目,我需要一个只有前20个数组的数组。我真的希望避免for循环。
感谢,
PM
如果您正在使用LinkedList
集合类(从System.Collections.Generic
),你可以使用LINQ获得它:
var myArray = list.Take(20).ToArray();
使用LINQ?
myLinkedList.Take(20).ToArray()
或
myLinkedList.Skip(5).Take(20).ToArray()
你说 “真的想避免循环” - 为什么?
如果你使用.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的方法更有效,也因为它创建阵列是刚开始的时候大小恰到好处。是的,它使用循环 - 但正如我所说,东西的到了。
我不介意内部循环,我在通过链表列表方法时错过了Take方法。我陷入了精选,这真的不是我需要的。 – user472875 2010-10-24 18:26:39
为什么你想避免一个循环?任何现有的方法都将在内部使用循环。 – winwaed 2010-10-24 18:20:41