如何从数组中删除第一个元素?

79

我有一个数组:

arr[0]="a"  
arr[1]="b"  
arr[2]="a"  

我想要删除只有arr[0]保留arr[1]arr[2]


我之前使用的是:

arr= arr.Where(w => w != arr[0]).ToArray();  

由于arr [0]arr [2]具有相同的值(“a”),因此我得到的结果只有arr [1]

如何返回arr [1]arr [2],并且仅删除arr [0]


1
这只是 List<T> 更好的选择之一。 - Ňɏssa Pøngjǣrdenlarp
你本可以使用另一个提供索引的重载:.Where((w, i) => i > 0),但是.Skip(1)可以消除对条件语句的担忧。 - spender
4个回答

234

你可以使用Skip轻松实现:

arr = arr.Skip(1).ToArray();  

这将创建另一个数组,其中包含像其他答案中一样的新元素。这是因为您无法从数组中删除或添加元素。数组具有固定的大小。


是的。非常直接。 - spender
以前没见过。非常好。慢慢地熟悉工具并学习它们的功能真是太好了。谢谢。 - lenny
8
要使用此代码(以及其他回答中的代码),您需要添加声明 using System.Linq; - Chris Halcrow
我希望有一个官方的扩展,类似于.DropFirst() - mr5

23

你可以尝试这个:

arr = arr.ToList().RemoveAt(0).ToArray();

我们根据已有的数组制作列表,将0位置的元素移除并将结果转换为数组。

或者这样说:

arr = arr.Where((item, index)=>index!=0).ToArray();

在这里,我们使用重载版本的Where,该版本还将索引作为参数。请查看此处

更新

另一种比上面更优雅的方法是使用Skip方法,正如D Stanley所指出的那样:

arr = arr.Skip(1).ToArray(); 

2
第一个解决方案不起作用,因为RemoveAt(0)是一个过程,它不返回一个列表,所以你不能在其上调用ToArray() - n1nsa1d00
我撤销了最后一次编辑,因为在我看来它并没有改善答案。 - Theodor Zoulias

2

使用Enumerable.Where的第二个重载:

arr = arr.Where((v,i) => i != 0).ToArray();

2

如何:

if (arr.Length > 0)
{
    arr = arr.ToList().RemoveAt(0).ToArray();
}
return arr;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接