2017-01-05 4 views
1

Я пытаюсь удалить последние две строки из списка, с текстом документа, я сделал это так:Как удалить последние две строки из списка

var lines = System.IO.File.ReadAllLines(doc.txt); 
System.IO.File.WriteAllLines(doc.txt, lines.Take(lines.Length - 2).ToArray()); 

, но когда я пытаюсь сделать то же самое с список

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

таким образом, я не результат:

myList.RemoveAt(myList.Count - 2); 
+2

Чтобы удалить последние два пункта в списке просто позвоните 'list.RemoveAt (list.Count - 1);' дважды. – juharr

ответ

4

Метод RemoveAt получает индекс как параметр. Так что если выполнить этот код:

list.RemoveAt(myList.Count - 2); 

Вы удалите элемент на позиции myList.Count - 2 вместо 2-х предметов. Так что если вы хотите, чтобы удалить последние два пункта вы можете сделать следующее:

list.RemoveAt(list.Count - 1); 
list.RemoveAt(list.Count - 1); 

Или лучше подход заключается в использовании в качестве RemoveRange Abdul предложить в своем ответе.

+1

Извините, у вас была опечатка, вы имели в виду список.Count - 2 в вашей рекомендации? не приведет ли это к удалению последней строки и, по существу, третьей строки из исходного списка? – Hack

+1

@Hack спасибо взломать Я пропустил это в спешке :-D. Ты прав.Я исправляю это. – Sebi

+1

@Sebi Привет, да, это полезно для моего случая – nikorio

-2

List<T> не предназначен быть проиндексированы элементом. Для этого вам нужен массив или Dictionary.

Итак, если у вас есть list со всеми строками, вам нужно будет найти строки по содержанию ... или еще лучше в вашем примере, чтобы эти последние 2 строки не были добавлены в список в первую очередь, во время логика чтения ввода-вывода.

+1

Причина, по которой я рекомендую отказаться от использования 'List', потому что это не коллекция, предназначенная для использования индексом (т.е.« последние два »,« последний »,« первый »и т. Д.) –

+2

Список абсолютно необходимо для доступа по индексу. Под обложками это просто массив, который изменяется по мере необходимости. – juharr

+1

@juharr не пользователем, это не так. 'List ' - это динамическая коллекция, не гарантированная сортировка или индексирование каким-либо определенным образом в определенное время. Если вы хотите сделать логику, включающую доступ к элементам по индексу (т. Е. «Последние два»), то с массивом вы хотите работать. Или что-то с ключом, например «Словарь». –

5

Вы можете использовать RemoveRange, также индекс нот основан на нулевом значении, а Count - нет.

list.RemoveRange(list.Count - 2, list.Count - 1); 

Это удалит последние две строки внутри List<string>

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