一个答案是创建一个短一个元素的新数组。还有其他更简单的方法吗?
您可以使用 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 毫秒。除非您正在使用大量元素进行某种疯狂的数学运算,否则 LINQ 就很好,而且可读性更高。
这是在 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 循环的初始值)。
结合@xpda和@Enigmativity的答案,观察到Array.Copy可以安全地用于复制回原始数组。引用 Array.Copy 方法的 msdn 页面:
如果sourceArray和destinationArray重叠,则此方法的行为就像在覆盖destinationArray之前将sourceArray的原始值保留在临时位置中一样。
这是一个(扩展)子例程,它将删除任何类型数组中指定索引处的元素:
' 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
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
您还可以转换列表,删除特定索引处的项目,然后将其转换回数组。
Dim tempList = strSplit.ToList
tempList.RemoveAt(0)
Dim newArray = tempList.ToArray