如何从数组中删除第一个或最后一个项目并创建新数组?

时间:2015-06-01 07:59:26

标签: arrays vb.net

我有一个包含{2,3,4,7,8,9}等随机整数的数组。我必须检索2个包含以下内容的数组:

  • {2,3,4,7,8}(删除最后一个)
  • {3,4,7,8,9}(删除第一个否)

我怎么能在vb中做这个,有什么建议吗?

2 个答案:

答案 0 :(得分:8)

Dim numbers As Int32() = {2, 3, 4, 7, 8, 9}
Dim noFirst As Int32() = numbers.Skip(1).ToArray()
Dim noLast As Int32() = numbers.Take(numbers.Length - 1).ToArray()

这些是LINQ方法,因此您至少需要.NET 3.5和Imports System.Linq

如果你不想使用LINQ;这样效率更高但可读性更低:

Dim noFirst(numbers.Length - 2) As Int32
Dim noLast(numbers.Length - 2) As Int32
Array.Copy(numbers, 1, noFirst, 0, noFirst.Length)
Array.Copy(numbers, noLast, noLast.Length)

答案 1 :(得分:2)

给出的答案是正确的;我只是展示了另一种方法来实现不会因复制开销而受到影响(通过使用ToArrayArray.Copy),并且在各种情况下都会很有趣。

使用(低估的)ArraySegment结构(基本上是指向原始数组的指针,起始偏移量和计数)

Dim numbers = { 2, 3, 4, 7, 8, 9 }
Dim exceptFirst = New ArraySegment(Of Int32)(numbers, 1, numbers.Length - 1)
Dim exceptLast = New ArraySegment(Of Int32)(numbers, 0, numbers.Length - 1)

作为旁注,请记住,从ArraySegment可以看到原始数组中的更改(因为它只是它周围的包装)