在运行时的Windows窗体应用程序中,每次添加元素时,我都会调整数组的大小。首先,我必须调整大小到size + 1
,然后在此索引中添加一个成员。我该怎么做?
答案 0 :(得分:24)
你可以使用ReDim
语句,但这确实不是你最好的选择。如果您的数组经常更改大小,特别是,因为它听起来就像您只是附加,您应该使用通用的List(Of T)
或类似的集合类型。
您可以像使用数组一样使用它,另外添加项目到最后就像MyList.Add(item)
要使用通用列表,请将Imports System.Collections.Generics
添加到文件顶部。然后,您将声明一个新的整数列表,如下所示:
Dim MyList As New List(Of Integer)()
或像这样的字符串列表:
Dim MyList As New List(Of String)()
你应该明白这一点。
答案 1 :(得分:8)
建议的ReDim需要此方案的Preserve关键字。
ReDim Preserve MyArray(n)
答案 2 :(得分:7)
使用通用列表是(如建议的)最好的主意。但是,如果您想更改数组的大小,可以使用Array.Resize(ByRef arr, newSize)
。
ReDim不是一个好(非常糟糕)的想法(VB特有的遗产,非常慢)。
答案 3 :(得分:2)
我更喜欢某种类型的集合类,但是如果你想使用数组就这样做:
Dim arr() As Integer
Dim cnt As Integer = 0
Dim ix As Integer
For ix = 1 To 1000
cnt = cnt + 1
ReDim arr(cnt)
arr(cnt - 1) = ix
Next
答案 4 :(得分:1)
使用ReDim命令指定新大小。
ReDim MyArray(MyArray.Length + 1)
答案 5 :(得分:1)
您也可以制作自己的收藏课程。对新程序员来说是一个很好的编程练习。
Public Class MyList
Private Items() As String
Private No As Integer = 0
Public Sub Add(ByVal NewItem As String)
''Create a temporary new string array
Dim CopyString(No) As String
''Copy values from Global Variable Items() to new CopyString array
For i As Integer = 0 To No - 1
CopyString(i) = Items(i)
Next
''Add new value - NewItem - to CopyString
CopyString(No) = NewItem
''Increment No to No + 1
No += 1
''Copy CopyString to Items
Items = CopyString
'Discard CopyString
CopyString = Nothing
End Sub
Public Sub Show(ByVal index As Integer)
MsgBox(Items(index))
End Sub
End Class
''Now create a form with a TextBox name - txt, Button1 and Button2
Public Class Form1
''Declare txts as a new MyList Class
Private txts As New MyList
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
''Add text to txts which is a MyList Class
txts.Add(txt.Text)
txt.Text = ""
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
''Display value at a specific index
txts.Show(Convert.ToInt16(txt.Text))
txt.Text = ""
End Sub
End Class
答案 6 :(得分:0)
正如乔尔所说,请使用清单。
Dim MyList As New List(Of String)
不要忘记将字符串更改为您正在使用的任何数据类型。
答案 7 :(得分:0)
这项工作对我来说
Dim Table1 As New DataTable
' Define columns
Table1.Columns.Add("Column1", GetType(System.String))
Table1.Columns.Add("Column2", GetType(System.Int32))
Table1.Columns.Add("Column3", GetType(System.Int32))
' Add a row of data
Table1.Rows.Add("Item1", 44, 99)
Table1.Rows.Add("Item2", 42, 3)
Table1.Rows.Add("Item3", 42, 3)
Table1.Rows.Add("Item4", 42, 3)
Dim arr(-1) As String
For Each dr As DataRow In Table1.Rows
ReDim Preserve arr(arr.Length)
arr(arr.Length - 1) = dr("Column1")
Next