Как усечь список?

Какой самый простой способ удалить каждый элемент после и включив n-й элемент в System.Collections.Generic.List<T>?

Ответы

Ответ 1

Если вы можете использовать метод RemoveRange, просто выполните:

list.RemoveRange(index, count);

Где указатель, откуда начать и считать, сколько нужно удалить. Таким образом, чтобы удалить все из определенного индекса в конец, код будет выглядеть следующим образом:

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

И наоборот, вы можете использовать:

list.GetRange(index, count);

Но это создаст новый список, который может быть не таким, каким вы хотите.

Ответ 2

sans LINQ quicky...

    while (myList.Count>countIWant) 
       myList.RemoveAt(myList.Count-1);

Ответ 3

list.Take(n);

Ответ 4

Если LINQ не является опцией, вы можете прокручивать список назад:

for(int i = list.Count - 1; i >= index; i--)
{
    list.RemoveAt(i);
}

Ответ 5

Вот пример приложения, чтобы сделать это

    static void Main(string[] args)
    {
        List<int> lint = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

        Console.WriteLine("List Elements");
        lint.ForEach(delegate(int i) {  Console.WriteLine(i); });

        lint.RemoveRange(8, lint.Count - 8);

        Console.WriteLine("List Elements after removal");
        lint.ForEach(delegate(int i) { Console.WriteLine(i); });

        Console.Read();

    }