2012-07-19 20 views

Trả lời

21

Có phương pháp truy xuất các mục này, List.GetRange. http://msdn.microsoft.com/en-us/library/21k0e39c.aspx

List<Item> myList = new List<Item>; 
myList.GetRange(50, 10); // Retrieves 10 items starting with index #50 
+1

có lẽ OP muốn 11 mục;) –

+0

Đáng tiếc là điều này không có sẵn cho 'IList' và' IReadOnlyList'. – Arek

3
var myNewList = myList.Skip(50).Take(10); 
+0

giải pháp rất gọn gàng. –

+0

Đọc qua tài liệu về "bỏ qua" và "thực hiện", có vẻ như họ sử dụng logic IEnumerable cơ bản. Điều này có nghĩa là hiệu suất là O (số mục bị bỏ qua)? tức là bỏ qua 100 chậm hơn bỏ qua 50? –

+1

@TedSpence có nó phải được. Không chắc chắn nếu có tối ưu hóa cụ thể được thực hiện, như kiểm tra xem IEnumerable cơ bản là IList và như vậy. Không giống như vậy từ các liên kết này nói rằng Danh sách .GetRange sẽ hiệu quả hơn cho các bộ sưu tập lớn hơn: 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

0

gì về:

 List<string> myList = new List<string>(); 

     //added 100 of Items to myList 
     for (int i=0; i<100; ++i) 
     { 
      myList.Add("blablabla"); 
     } 

     //then I want to grab items at indices 50 - 60 
     // Note: 50 - 60 inclusivly are actually 11 items 
     List<string> myNewList = myList.GetRange(50, 11); 
Các vấn đề liên quan