我有一個列表中的5項。我可以直接從列表中「提取」一個項目嗎?
我想提取的最後一個項目,如:
string lastItem = myList.Last();
,但在此之後,myList中必須包含4項,萬物除了最後一個,這是剛剛提取。
可能嗎?或者我需要使用.Take(4)?
我有一個列表中的5項。我可以直接從列表中「提取」一個項目嗎?
我想提取的最後一個項目,如:
string lastItem = myList.Last();
,但在此之後,myList中必須包含4項,萬物除了最後一個,這是剛剛提取。
可能嗎?或者我需要使用.Take(4)?
您可以使用List.Remove
,List.RemoveRange
或List.RemoveAt
方法從列表中刪除元素。
var element = myList[myList.Count - 1];
myList.RemoveAt(myList.Count - 1);
使用RemoveAt
,而不是Remove
更有效,因爲沒有必要先找到:
要使用您使用列表索引中刪除列表中的最後一個元素,你獲得對它的引用後要刪除的項目的索引,還要注意Remove
只是刪除與要刪除項目相匹配的第一個匹配項,因此在具有重複項的列表中,它不會是最後一個元素。最後,如果你有一個算法去除多次列表中的最後一項,你還可以考慮另一個數據結構,比如Queue
。
如果你想採取最後一步,你可以做如下事情。
string lastItem = myList.Last();
myList.Remove(myList.Last());
//myList.Count() will now be 4.
如果最後一個項目已多次添加到列表中,則不會刪除最後一個項目。 – hvd
這是真的。如果列表可以包含多個字符串,則這將不起作用。然後RemoveAt(int)更準確。 –
在IList
您可以創建需要任何索引做取/去除擴展方法:
public static T Extract<T>(this List<T> list, int index)
{
var item = list[index];
list.RemoveAt(index);
return item;
}
最後一個項目總是可以使用Count - 1
發現,所以通話很簡單:
var item = list.Extract(list.Count - 1);
這意味着你可以通過索引「提取」任何項目。
創建一個擴展方法來做到這一點
public static class Extension
{
public static string RemoveLast(this IList<string> myList)
{
int lastItemIndex = myList.Count - 1;
string lastItem = myList.Last();
myList.RemoveAt(lastItemIndex);
return lastItem;
}
}
稱其爲
string itemRemoved = lst.RemoveLast(); //this will delete the last element from list & return last element as well
爲什麼不使用,而不是它似乎更適合
[Test]
public void MyTest()
{
Stack<int> stack = new Stack<int>(new[] { 1, 2, 3, 4, 5 });
int pop = stack.Pop();
Assert.AreEqual(stack.Count, 4);
Assert.AreEqual(pop, 5);
}
好方法,但這取決於他在列表中所做的事情。只是針對問題所有者描述的具體問題,您的做法似乎很好 – Adi
嗨markzzz列表的堆棧,恐怕你只能在隊列中做到這一點,如果你想在列表中找到它,你應該自己「移除」這個物品。 –