vb.net从数组中删除第一个元素

时间:2011-08-24 00:52:16

标签: vb.net arrays elements

一个答案是创建一个短元素的新数组。还有其他更简单的方法吗?

5 个答案:

答案 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