一个答案是创建一个短元素的新数组。还有其他更简单的方法吗?
答案 0 :(得分:12)
您可以使用LINQ以非常简洁的代码生成结果:
Dim a2 = a.Skip(1).ToArray();
你可能有批评者说这很慢,你应该使用Array.Copy
代替:
Dim a2(a.Length - 2) as Integer
Array.Copy(a, 1, a2, 0, a.Length - 1)
然而,我使用一个包含1,000,000个元素的整数数组测试了两种方法的时序,发现LINQ花费了29毫秒,直接拷贝花了3毫秒。除非你用gazilions元素进行某种疯狂的数学运算,否则LINQ很好,而且更具可读性。
答案 1 :(得分:4)
这是在vb.net中删除数组的第一个元素的一种方法。
dim a(n)
...
for i = 1 to ubound(a)
a(i-1) = a(i)
next i
redim preserve a(ubound(a)-1)
你可以为此创建一个函数来删除数组的任意元素(有一个参数作为for循环的初始值)。
答案 2 :(得分:4)
不要忘记 - 现在您正在使用.Net,您不再局限于严格使用“数组”。您可以(并且可以说,视情况而定)使用列表,地图,队列和各种其他数据结构的优点:
答案 3 :(得分:4)
结合@ xpda和@Enigmativity的答案,观察Array.Copy可以安全地用于复制回原始数组。从msdn页面引用Array.Copy方法:
如果sourceArray和destinationArray重叠,则此方法的行为就像sourceArray的原始值在覆盖destinationArray之前保存在临时位置一样。
这是一个(扩展)子例程,它将删除任何类型数组的指定索引处的元素:
' Remove element at index "index". Result is one element shorter.
' Similar to List.RemoveAt, but for arrays.
<System.Runtime.CompilerServices.Extension()> _
Public Sub RemoveAt(Of T)(ByRef a() As T, ByVal index As Integer)
' Move elements after "index" down 1 position.
Array.Copy(a, index + 1, a, index, UBound(a) - index)
' Shorten by 1 element.
ReDim Preserve a(UBound(a) - 1)
End Sub
用法示例(假设数组以索引0开头):
a.RemoveAt(0) ' Remove first element
a.RemoveAt(1) ' Remove second element.
a.RemoveAt(UBound(a)) ' Remove last element
答案 4 :(得分:0)
Public xArray as variant
Function Array_DeleteFirstItem()
Dim i As Integer
For i = 0 To UBound(xArray) - 1
xArray (LBound(xArray) + i) = xArray(LBound(NotContainsArray) + i + 1)
Next
ReDim Preserve xArray(UBound(NotContainsArray) - 1)
For i = 0 To UBound(xArray)
Debug.Print xArray(i)
Next
End Function