2012-10-30 29 views
23

從列表中選擇特定範圍內的所有項目並將其放入新項目中的最有效方法是什麼?如何從列表中獲取特定範圍內的項目(3-7)?

List<DataClass> xmlList = new List<DataClass>(); 

這是我的列表,我想將所有DataClass項目之間的範圍(3 - 7)在一個新的列表。

什麼是最有效的方法?一個每次都計算++的foreach循環,直到達到範圍之間的項目並將這些項目添加到新列表中?

+0

[由開始和結束索引抓取列表的一部分]的可能重複(http://stackoverflow.com/questions/11566857/grabbing-a-part-of-the-listitem-by-開始和結束索引) – nawfal

回答

51

你正在尋找的方法是GetRange

List<int> i = new List<int>(); 
List<int> sublist = i.GetRange(3, 4); 

var filesToDelete = files.ToList().GetRange(2, files.Length - 2); 

從總結:

// Summary: 
//  Creates a shallow copy of a range of elements in the source System.Collections.Generic.List<T>. 
// Parameters: 
// index: 
//  The zero-based System.Collections.Generic.List<T> index at which the range 
//  starts. 
// count: 
//  The number of elements in the range. 
18

如果由於某種原因,你不喜歡使用GetRange方法,您還可以使用LINQ來編寫以下內容。

List<int> list = ... 
var subList = list.Skip(2).Take(5).ToList(); 
+1

我建議你使用'ToList'擴展名代替:'List copy = list.Skip(2).Take(5).ToList()'。它基本上是做同樣的事情,但我覺得它更適合LINQ表達式。 –

+0

@MartinLiversage請注意,它只是一個視覺差異,除非你正在處理一個匿名類型(在這種情況下你*需要*'ToList')。在功能上兩者幾乎完全相同。 – Servy

+0

請注意,列表 .GetRange對於較大的集合將更有效:https://icodeit.wordpress.com/2012/08/27/performance-of-skip-and-take-in-linq-to-objects/ ,http://geekswithblogs.net/BlackRabbitCoder/archive/2012/03/29/c.net-little-wonders-skip-and-take.aspx – nawfal

相關問題