2010-10-24 53 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