Visual Basic 数组
数组是存放具有相同性质的一组数据,也就是数组中的数据必须是同一个类型和性质,且这些数据都是有顺序的。
即所有数组都由连续的内存位置组成。最低地址对应于第一个元素,最高地址对应最后一个元素。

创建数组
要在 VB 中声明一个数组,可以使用 Dim 语句。 例如:
Dim intData(30) '31 位数组'Dim strData(20) As String '21 位字符串数组'Dim twoDarray(10, 20) As Integer '一个整型二维数组'Dim ranges(10, 100) '一个二维数组'
您也可以在声明数组的同时初始化数组元素。 例如:
Dim intData() As Integer = {12, 16, 20, 24, 28, 32}Dim names() As String = {"Karthik", "Sandhya", "Shivangi", "Ashwitha", "Somnath"}Dim miscData() As Object = {"Hello World", 12d, 16ui, "A"c}
可以使用数组的索引来存储和访问数组中的元素。比如下面的实例:
Module arrayAplSub Main()Dim n(10) As Integer ' n is an array of 11 integers 'Dim i, j As Integer' initialize elements of array n 'For i = 0 To 10n(i) = i + 100 ' set element at location i to i + 100Next i' output each array element's value 'For j = 0 To 10Console.WriteLine("Element({0}) = {1}", j, n(j))Next jConsole.ReadKey()End SubEnd Module
结果如下:
Element(0) = 100Element(1) = 101Element(2) = 102Element(3) = 103Element(4) = 104Element(5) = 105Element(6) = 106Element(7) = 107Element(8) = 108Element(9) = 109Element(10) = 110
动态数组
动态数组是可以按照程序的需要进行标注和重新定义的数组。可以使用 ReDim 语句声明动态数组。
ReDim 语句的语法:
ReDim [Preserve] arrayname(subscripts)
其中,
- Preserve 关键字有助于在调整大小时保留现有数组中的数据。
- arrayname 是要重新维度的数组的名称。
- subscripts 指定新的维度。
实例
Module arrayAplSub Main()Dim marks() As IntegerReDim marks(2)marks(0) = 85marks(1) = 75marks(2) = 90ReDim Preserve marks(10)marks(3) = 80marks(4) = 76marks(5) = 92marks(6) = 99marks(7) = 79marks(8) = 75For i = 0 To 10Console.WriteLine(i & vbTab & marks(i))Next iConsole.ReadKey()End SubEnd Module
结果如下:
0 851 752 903 804 765 926 997 798 759 010 0
多维数组
VB 支持多维数组,多维数组也被称为矩形数组。可以声明一个 2 维的字符串数组:
Dim twoDStringArray(10, 20) As String
或者是一个整数变量的三维数组:
Dim threeDIntArray(10, 10, 10) As Integer
实例
Module arrayAplSub Main()' an array with 5 rows and 2 columnsDim a(,) As Integer = {{0, 0}, {1, 2}, {2, 4}, {3, 6}, {4, 8}}Dim i, j As Integer' output each array element's value 'For i = 0 To 4For j = 0 To 1Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i, j))Next jNext iConsole.ReadKey()End SubEnd Module
结果如下:
a[0,0]: 0a[0,1]: 0a[1,0]: 1a[1,1]: 2a[2,0]: 2a[2,1]: 4a[3,0]: 3a[3,1]: 6a[4,0]: 4a[4,1]: 8
锯齿数组(Jagged Array)
锯齿数组也叫交错数组和不规则数组。它是数组的数组。下面的代码显示了声明一个名为 scores 的锯齿状数组:
Dim scores As Integer()() = New Integer(5)(){}
下面是一个锯齿数组的实例:
实例
Module arrayAplSub Main()'a jagged array of 5 array of integersDim a As Integer()() = New Integer(4)() {}a(0) = New Integer() {0, 0}a(1) = New Integer() {1, 2}a(2) = New Integer() {2, 4}a(3) = New Integer() {3, 6}a(4) = New Integer() {4, 8}Dim i, j As Integer' output each array element's valueFor i = 0 To 4For j = 0 To 1Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i)(j))Next jNext iConsole.ReadKey()End SubEnd Module
结果如下:
a[0][0]: 0a[0][1]: 0a[1][0]: 1a[1][1]: 2a[2][0]: 2a[2][1]: 4a[3][0]: 3a[3][1]: 6a[4][0]: 4a[4][1]: 8
Array 类
Array 类是 VB 中所有数组的基类。它在 System 命名空间中定义。Array 类提供了各种属性和方法来处理数组。
Array 类的属性
下面提供了 Array 类的一些最常用的属性:
| 编号 | 属性 | 描述 |
|---|---|---|
| 1 | IsFixedSize | 获取一个值,指示 Array 是否具有固定大小。 |
| 2 | IsReadOnly | 获取一个值,指示数组是否是只读。 |
| 3 | Length | 获取一个 32 位整数,表示数组所有维度中的元素总数。 |
| 4 | LongLength | 获取一个 64 位整数,它表示数组中所有维的元素总数。 |
| 5 | Rank | 获取数组的等级(维数)。 |
Array 类的方法
下面提供了 Array 类的一些最常用的方法:
| 编号 | 方法 | 描述 |
|---|---|---|
| 1 | Public Shared Sub Clear (array As Array, index As Integer, length As Integer) | 根据元素类型,将数组中的元素范围设置为零,为 false 或为 null。 |
| 2 | Public Shared Sub Copy (sourceArray As Array, destinationArray As Array, length As Integer) | 从第一个元素开始,从 Array 中复制一系列元素,并将它们粘贴到第一个元素开始的另一个 Array 中。长度被指定为 32 位整数。 |
| 3 | Public Sub CopyTo (array As Array, index As Integer) | 将当前一维数组的所有元素复制到指定的一维数组,从指定的目标数组索引开始。该索引被指定为一个 32 位整数。 |
| 4 | Public Function GetLength (dimension As Integer) As Integer | 获取一个 32 位整数,该整数表示 Array 的指定维度中的元素数。 |
| 5 | Public Function GetLongLength (dimension As Integer) As Long | 获取一个 64 位整数,它表示 Array 的指定维度中的元素数。 |
| 6 | Public Function GetLowerBound (dimension As Integer) As Integer | 获取数组中指定维度的下限。 |
| 7 | Public Function GetType As Type | 获取当前实例的 Type (从 Object 继承)。 |
| 8 | Public Function GetUpperBound (dimension As Integer) As Integer | 获取数组中指定维的上界。 |
| 9 | Public Function GetValue (index As Integer) As Object | 获取一维数组中指定位置的值。该索引被指定为一个 32 位整数。 |
| 10 | Public Shared Function IndexOf (array As Array,value As Object) As Integer | 搜索指定的对象并返回整个一维数组中第一个匹配项的索引。 |
| 11 | Public Shared Sub Reverse (array As Array) | 颠倒整个一维数组中元素的顺序。 |
| 12 | Public Sub SetValue (value As Object, index As Integer) | 将值设置为一维数组中指定位置的元素。索引被指定为一个 32 位整数。 |
| 13 | Public Shared Sub Sort (array As Array) | 使用 Array 的每个元素的 IComparable 实现对整个一维 Array 中的元素进行排序。 |
| 14 | Public Overridable Function ToString As String | 返回表示当前对象的字符串(从 Object 继承)。 |
实例
以下程序演示如何使用 Array 类的一些方法:
Module arrayAplSub Main()Dim list As Integer() = {34, 72, 13, 44, 25, 30, 10}Dim temp As Integer() = listDim i As IntegerConsole.Write("Original Array: ")For Each i In listConsole.Write("{0} ", i)Next iConsole.WriteLine()' reverse the arrayArray.Reverse(temp)Console.Write("Reversed Array: ")For Each i In tempConsole.Write("{0} ", i)Next iConsole.WriteLine()'sort the arrayArray.Sort(list)Console.Write("Sorted Array: ")For Each i In listConsole.Write("{0} ", i)Next iConsole.WriteLine()Console.ReadKey()End SubEnd Module
结果如下:
Original Array: 34 72 13 44 25 30 10Reversed Array: 10 30 25 44 13 72 34Sorted Array: 10 13 25 30 34 44 72