如何删除数组中的第一个元素? [复制]
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中的第一个元素之外的所有元素