6

我有一个动态整数数组,我希望向其中添加新值。我该怎么做?

Dim TeamIndex(), i As Integer

For i = 0 to 100
    'TeamIndex(i).Add = <some value>
Next
4

2 回答 2

9

使用 ReDim 和 Preserve 来增加数组的大小并保留旧值。

当您不知道大小并且知道要逐个增加数组大小时,建议使用循环中的 ReDim。

Dim TeamIndex(), i As Integer

For i = 0 to 100
     ReDim Preserve TeamIndex(i)
    TeamIndex(i) = <some value>
Next

如果您稍后在镜头中的代码中声明数组的大小,请使用

 ReDim TeamIndex(100)

所以代码将是:

Dim TeamIndex(), i As Integer
ReDim TeamIndex(100)
For i = 0 to 100
    TeamIndex(i) = <some value>
Next

您可以使用 ArrayList/List(Of T) 更动态地使用添加/删除值。

 Sub Main()
    ' Create an ArrayList and add three strings to it.
    Dim list As New ArrayList
    list.Add("Dot")
    list.Add("Net")
    list.Add("Perls")
    ' Remove a string.
    list.RemoveAt(1)
    ' Insert a string.
    list.Insert(0, "Carrot")
    ' Remove a range.
    list.RemoveRange(0, 2)
    ' Display.
    Dim str As String
    For Each str In list
        Console.WriteLine(str)
    Next
    End Sub

列表(T) MSDN

List(Of T) DotNetperls

于 2012-05-14T07:32:53.920 回答
2

我认为Romil的回答没有任何错误,但我会更进一步。 ReDim Preserve是一个非常有用的命令,但重要的是要意识到它是一个昂贵的命令并明智地使用它。

考虑:

Dim TeamIndex(), i As Integer
For i = 0 to 100
  ReDim Preserve TeamIndex(i)
  TeamIndex(i) = <some value>
Next

对于每个循环,除了 i=0,公共语言运行时 (CLR) 必须:

  • 为比前一个数组大一个元素的新整数数组找到空间
  • 复制前一个数组中的值
  • 初始化新元素
  • 释放前一个数组进行垃圾回收。

ArrayList如果您需要从数组中间添加或删除元素,但即使您不需要它,您也要为该功能付费。例如,如果您正在从文件中读取值并按顺序存储它们,但事先不知道会有多少值,ArrayList则可以避免大量开销。

我总是这样使用ReDim

Dim MyArray() As XXX
Dim InxMACrntMax As Integer

ReDim MyArray(1000)
InxMACrntMax=-1

Do While more data to add to MyArray

  InxMACrntMax = InxMACrntMax + 1
  If InxMACrntMax > UBound(MyArray) Then
    ReDim Preserve MyArray(UBound(MyArray)+100)
  End If
  MyArray(InxMACrntMax) = NewValue

Loop                

ReDim MyArray(InxMACrntMax)    ' Discard excess elements

上面我使用了 100 和 1000。我选择的值取决于我对可能要求的评估。

于 2012-05-14T09:24:09.110 回答