如何删除数组中的第一个元素? [复制]

Posted

技术标签:

【中文标题】如何删除数组中的第一个元素? [复制]【英文标题】:How to remove the first element in an array? [duplicate] 【发布时间】:2015-01-15 14:02:26 【问题描述】:

我有一个数组:

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]

【问题讨论】:

这只是 List 成为更好选择的众多原因之一 您可以使用提供索引的不同重载:.Where((w, i) => i > 0).Skip(1) 甚至无需担心您的条件。 【参考方案1】:

您可以使用Skip 轻松做到这一点:

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

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

【讨论】:

是的。非常直接。 以前没见过。很不错。慢慢地正确了解您的工具并了解它们包含的功能真是太好了。谢谢。 要使用这个(以及问题的其他答案),您需要声明 using System.Linq; 我希望有像.DropFirst()这样的官方扩展【参考方案2】:

你可以试试这个:

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

我们根据已有的数组创建一个列表,我们移除 0 位置的元素并进行强制转换 结果到一个数组中。

或者这个:

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

我们使用Where 的重载版本,它也将项目的索引作为参数。请看here。

更新

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

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

【讨论】:

第一个解决方案不起作用,因为RemoveAt(0) 是一个过程,它不返回列表,因此您可以调用ToArray() on... 我撤销了最后一次编辑,因为它没有改善恕我直言的答案。【参考方案3】:

怎么样:

if (arr.Length > 0)

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

return arr;

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于如何删除数组中的第一个元素? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从数组中删除除javascript中的第一个元素之外的所有元素

如何从javascript中的数组中删除最后一个索引元素? [复制]

java中 如何在一个数组中删除里面的元素

如何从 JavaScript 中的数组中删除元素?

删除数组中的第一个和最后一个元素

删除数组中的第一个和最后一个元素