我有一个包含{2,3,4,7,8,9}
等随机整数的数组。我必须检索2个包含以下内容的数组:
{2,3,4,7,8}
(删除最后一个){3,4,7,8,9}
(删除第一个否)我怎么能在vb中做这个,有什么建议吗?
答案 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)
给出的答案是正确的;我只是展示了另一种方法来实现不会因复制开销而受到影响(通过使用ToArray
或Array.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可以看到原始数组中的更改(因为它只是它周围的包装)