2013-02-27 2 views
2

Если у меня есть массив объектов, и я хочу удалить все предметы после определенной длиныВ C# как удалить элементы в массиве после определенной длины?

например, если начальная длина массива равна 10, и я хочу сохранить только первые 5 элементов в массиве и удалить все после этого. ПРИМЕЧАНИЕ. Массив может быть меньше 5, что ничего не сделает.

int startLength = 10; 
    int maxLength = 5; 
    List<MYObject> myList = CreateListofObjects(startLength); 

Я хочу что-то вроде «RemoveAfter», где «RemoveAfter» будет делать что-то вроде этого:

myList = myList.RemoveAfter(maxLength); 

    Assert.IsTrue(myList.Count() ==5); 
+2

Side Примечание: ваше название говорит "массив", но вы хотите, чтобы манипулировать 'list'. Также вы не указали, нужно ли сохранять список или новый экземпляр в порядке - так что у вас есть 2 ответа, охватывающих оба варианта (Mitch Wheat's and Serdalis, +1 каждый). –

ответ

7
myList = myList.Take(maxLength).ToList(); 

[Примечание: это создает новый список, который мы задаём к первоначальному списку placeholder (myList), вместо того, чтобы изменять исходный список на месте. ]

+0

Просто обратите внимание, что это не мутирует существующую коллекцию, она создает новую последовательность/коллекцию. – Servy

2

Take и ToList может работать (и это будет создавать новый список)

myList = myList.Take(maxLength).ToList(); 

И если вам нужно сохранить список - RemoveRange там тоже:

myList.RemoveRange(maxLength, myList.Count - maxLenght); 

Примечание: убедитесь, образцы работают для случаев, когда список имеет меньше элементов, чем maxLength.

2

Вы ищете RemoveRange

Пример:

if(myList.Count() > maxLength) { 
    myList.RemoveRange(maxLength, (mylist.Count()-maxLength)); 
} 
+0

Это вызовет исключение ArgumentOutOfRangeException, если список слишком короткий. – Tim

+0

@ Разумеется, просто убедитесь, что список меньше, чем maxLength. – Serdalis

Смежные вопросы