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

问题描述 投票:0回答:5

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

vb.net arrays element
5个回答
15
投票

您可以使用 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 就很好,而且可读性更高。


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 循环的初始值)。


4
投票

结合@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

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

0
投票

您还可以转换列表,删除特定索引处的项目,然后将其转换回数组。

 Dim tempList = strSplit.ToList
 tempList.RemoveAt(0)
 Dim newArray = tempList.ToArray
© www.soinside.com 2019 - 2024. All rights reserved.