在VB.NET中在运行时调整数组大小

时间:2009-06-08 22:49:52

标签: vb.net arrays

在运行时的Windows窗体应用程序中,每次添加元素时,我都会调整数组的大小。首先,我必须调整大小到size + 1,然后在此索引中添加一个成员。我该怎么做?

8 个答案:

答案 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