2017-01-05 27 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作爲阿卜杜勒在他的回答提示。

+1

對不起有一個錯字,你的意思是有list.Count - 2在你的建議?這不會導致刪除最後一行,基本上是原始列表中的第三行? – Hack

+1

@Hack謝謝你破解我錯過了那個着急:-D。你是對的。我糾正了這一點。 – Sebi

+1

@塞比你好,是的,它對我的​​情況很有用 – nikorio

-2

一個List<T>並不意味着由元素索引。你需要一個數組或者一個Dictionary來做到這一點。

所以,當你有list所有的行,你需要按照內容找到行......或者更好的在你的例子中,保持最後2行不被添加到列表中, IO讀取邏輯。

+1

爲什麼我建議不要使用List來做這個事情是因爲它不是一個旨在被索引使用的集合(即「last two」,「last」,「first」等) –

+2

一個列表絕對意味着被索引訪問。在封面下面,它只是一個需要調整大小的數組。 – juharr

+1

@juharr不是由用戶不是。 '列表'是一個動態集合,不保證在特定時間以任何特定方式排序或索引。如果您想要執行涉及通過索引訪問元素的邏輯(即「最後兩個」),則數組就是您想要處理的內容。或者用一個關鍵字,例如'Dictionary'。 –

5

您可以使用RemoveRange,也注意索引是從零開始的,而Count不是。

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

這將刪除最後兩行的List<string>