Как мне усечь список в C #? - PullRequest
       25

Как мне усечь список в C #?

16 голосов
/ 07 августа 2010

Я знаю, что в python вы можете сделать что-то вроде myList[1:20], но есть ли что-нибудь подобное в C #?

Ответы [ 5 ]

36 голосов
/ 07 августа 2010
var itemsOneThroughTwenty = myList.Take(20);
var itemsFiveThroughTwenty = myList.Skip(5).Take(15);
23 голосов
/ 07 августа 2010

Вы можете использовать List<T>.GetRange():

var subList = myList.GetRange(0, 20);

Из MSDN:

Создает поверхностную копию диапазона элементов в источнике List<T>.

public List<T> GetRange(int index, int count)

6 голосов
/ 02 октября 2017

Это может быть полезно для эффективности, если вы действительно хотите обрезать список, а не делать копию.В то время как пример на python делает копию, оригинальный вопрос был об урезании списка.

Имеется объект List <> "list", и вам нужны элементы с 1-го по 20-й

list.RemoveRange( 20, list.Count-20 );

Это делается на месте.Это все еще O (n), так как ссылки на каждый объект должны быть удалены, но должно быть немного быстрее, чем любой другой метод.

3 голосов
/ 12 декабря 2012

без LINQ, быстрый ...

    while (myList.Count>countIWant) 
       myList.RemoveAt(myList.Count-1);
0 голосов
/ 06 марта 2013
    public static IEnumerable<TSource> MaxOf<TSource>(this IEnumerable<TSource> source, int maxItems)
    {
        var enumerator = source.GetEnumerator();            
        for (int count = 0; count <= maxItems && enumerator.MoveNext(); count++)
        {
            yield return enumerator.Current;
        }
    }
...