非常基本的問題,但是有沒有類似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