【问题标题】: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) 甚至无需担心您的条件。

标签: c# arrays linq


【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 2020-02-04
      • 2020-08-24
      • 2021-09-09
      • 2017-02-25
      • 2017-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      相关资源
      最近更新 更多