我有5个项目列表。
我想提取最后一项,例如:
string lastItem = myList.Last();
但在此之后,myList必须包含4个项目,除了最后一个项目之外的所有项目,只是提取的。
有可能吗?或者我需要使用.Take(4)?
答案 0 :(得分:5)
如果您想拍摄最后一张,可以执行以下操作。
string lastItem = myList.Last();
myList.Remove(myList.Last());
//myList.Count() will now be 4.
答案 1 :(得分:4)
您可以使用List.Remove
,List.RemoveRange
或List.RemoveAt
方法从列表中删除元素。
要使用列表索引器获取对它的引用后删除列表的最后一个元素:
var element = myList[myList.Count - 1];
myList.RemoveAt(myList.Count - 1);
使用RemoveAt
代替Remove
更有效率,因为无需首先找到要删除的项的索引,还要注意Remove
只删除第一次出现的内容匹配要删除的项目,因此在具有重复项的列表中,它不会是最后一个元素。
最后,如果您有一个算法将多次删除列表的最后一项,您可以考虑另一种数据结构,例如Queue
。
答案 2 :(得分:4)
您可以创建一个扩展方法,使用任何索引来执行提取/删除:
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);
这意味着您可以按索引“提取”任何项目。
答案 3 :(得分:2)
创建一个扩展方法来执行此操作
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
答案 4 :(得分:1)
为什么不使用Stack而不是List似乎更合适
[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);
}