向整数数组添加新值(Visual Basic 2010)

时间:2012-05-14 07:18:41

标签: vb.net arrays

我有一个动态整数数组,我想添加新值。我该怎么办?

Dim TeamIndex(), i As Integer

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

2 个答案:

答案 0 :(得分: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

List(Of T) MSDN

List(Of T) DotNetperls

答案 1 :(得分:2)

罗米尔的回答中没有任何内容我认为是错的,但我会更进一步。 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.我选择的值取决于我对可能要求的评估。