2012-07-19 8 views

Odpowiedz

21

Istnieje metoda, która pobiera te pozycje, 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

prawdopodobnie OP chce 11 pozycji;) –

+0

Szkoda, że ​​nie jest to dostępne dla 'IList' i' IReadOnlyList'. – Arek

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

rozwiązanie bardzo schludny. –

+0

Czytając dokumentację dla "pominąć" i "wziąć", wydaje się, że używają podstawowej logiki IEnumerable. Czy to oznacza, że ​​wydajność jest O (liczba pominiętych przedmiotów)? tj. przeskakuje o 100 wolniej niż przeskakuje 50? –

+1

@TedSpence tak musi być. Nie jestem pewien, czy są wykonywane określone optymalizacje, na przykład sprawdzanie, czy ukryty IEnumerable to IList i tak dalej. Nie wygląda tak z tych linków, które mówią, że lista .GetRange będzie bardziej wydajna dla większych kolekcji: 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

Co o:

 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); 
Powiązane problemy