我有一个动态整数数组,我想添加新值。我该怎么办?
Dim TeamIndex(), i As Integer
For i = 0 to 100
'TeamIndex(i).Add = <some value>
Next
答案 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
答案 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.我选择的值取决于我对可能要求的评估。