Visual Basic 数组

数组是存放具有相同性质的一组数据,也就是数组中的数据必须是同一个类型和性质,且这些数据都是有顺序的。

即所有数组都由连续的内存位置组成。最低地址对应于第一个元素,最高地址对应最后一个元素。


创建数组

要在 VB 中声明一个数组,可以使用 Dim 语句。 例如:

  1. Dim intData(30) '31 位数组'
  2. Dim strData(20) As String '21 位字符串数组'
  3. Dim twoDarray(10, 20) As Integer '一个整型二维数组'
  4. Dim ranges(10, 100) '一个二维数组'

您也可以在声明数组的同时初始化数组元素。 例如:

  1. Dim intData() As Integer = {12, 16, 20, 24, 28, 32}
  2. Dim names() As String = {"Karthik", "Sandhya", "Shivangi", "Ashwitha", "Somnath"}
  3. Dim miscData() As Object = {"Hello World", 12d, 16ui, "A"c}

可以使用数组的索引来存储和访问数组中的元素。比如下面的实例:

  1. Module arrayApl
  2. Sub Main()
  3. Dim n(10) As Integer ' n is an array of 11 integers '
  4. Dim i, j As Integer
  5. ' initialize elements of array n '
  6. For i = 0 To 10
  7. n(i) = i + 100 ' set element at location i to i + 100
  8. Next i
  9. ' output each array element's value '
  10. For j = 0 To 10
  11. Console.WriteLine("Element({0}) = {1}", j, n(j))
  12. Next j
  13. Console.ReadKey()
  14. End Sub
  15. End Module

结果如下:

  1. Element(0) = 100
  2. Element(1) = 101
  3. Element(2) = 102
  4. Element(3) = 103
  5. Element(4) = 104
  6. Element(5) = 105
  7. Element(6) = 106
  8. Element(7) = 107
  9. Element(8) = 108
  10. Element(9) = 109
  11. Element(10) = 110

动态数组

动态数组是可以按照程序的需要进行标注和重新定义的数组。可以使用 ReDim 语句声明动态数组。

ReDim 语句的语法:

  1. ReDim [Preserve] arrayname(subscripts)

其中,

  • Preserve 关键字有助于在调整大小时保留现有数组中的数据。
  • arrayname 是要重新维度的数组的名称。
  • subscripts 指定新的维度。
实例
  1. Module arrayApl
  2. Sub Main()
  3. Dim marks() As Integer
  4. ReDim marks(2)
  5. marks(0) = 85
  6. marks(1) = 75
  7. marks(2) = 90
  8. ReDim Preserve marks(10)
  9. marks(3) = 80
  10. marks(4) = 76
  11. marks(5) = 92
  12. marks(6) = 99
  13. marks(7) = 79
  14. marks(8) = 75
  15. For i = 0 To 10
  16. Console.WriteLine(i & vbTab & marks(i))
  17. Next i
  18. Console.ReadKey()
  19. End Sub
  20. End Module

结果如下:

  1. 0 85
  2. 1 75
  3. 2 90
  4. 3 80
  5. 4 76
  6. 5 92
  7. 6 99
  8. 7 79
  9. 8 75
  10. 9 0
  11. 10 0

多维数组

VB 支持多维数组,多维数组也被称为矩形数组。可以声明一个 2 维的字符串数组:

  1. Dim twoDStringArray(10, 20) As String

或者是一个整数变量的三维数组:

  1. Dim threeDIntArray(10, 10, 10) As Integer
实例
  1. Module arrayApl
  2. Sub Main()
  3. ' an array with 5 rows and 2 columns
  4. Dim a(,) As Integer = {{0, 0}, {1, 2}, {2, 4}, {3, 6}, {4, 8}}
  5. Dim i, j As Integer
  6. ' output each array element's value '
  7. For i = 0 To 4
  8. For j = 0 To 1
  9. Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i, j))
  10. Next j
  11. Next i
  12. Console.ReadKey()
  13. End Sub
  14. End Module

结果如下:

  1. a[0,0]: 0
  2. a[0,1]: 0
  3. a[1,0]: 1
  4. a[1,1]: 2
  5. a[2,0]: 2
  6. a[2,1]: 4
  7. a[3,0]: 3
  8. a[3,1]: 6
  9. a[4,0]: 4
  10. a[4,1]: 8

锯齿数组(Jagged Array)

锯齿数组也叫交错数组和不规则数组。它是数组的数组。下面的代码显示了声明一个名为 scores 的锯齿状数组:

  1. Dim scores As Integer()() = New Integer(5)(){}

下面是一个锯齿数组的实例:

实例
  1. Module arrayApl
  2. Sub Main()
  3. 'a jagged array of 5 array of integers
  4. Dim a As Integer()() = New Integer(4)() {}
  5. a(0) = New Integer() {0, 0}
  6. a(1) = New Integer() {1, 2}
  7. a(2) = New Integer() {2, 4}
  8. a(3) = New Integer() {3, 6}
  9. a(4) = New Integer() {4, 8}
  10. Dim i, j As Integer
  11. ' output each array element's value
  12. For i = 0 To 4
  13. For j = 0 To 1
  14. Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i)(j))
  15. Next j
  16. Next i
  17. Console.ReadKey()
  18. End Sub
  19. End Module

结果如下:

  1. a[0][0]: 0
  2. a[0][1]: 0
  3. a[1][0]: 1
  4. a[1][1]: 2
  5. a[2][0]: 2
  6. a[2][1]: 4
  7. a[3][0]: 3
  8. a[3][1]: 6
  9. a[4][0]: 4
  10. a[4][1]: 8

Array 类

Array 类是 VB 中所有数组的基类。它在 System 命名空间中定义。Array 类提供了各种属性和方法来处理数组。

Array 类的属性

下面提供了 Array 类的一些最常用的属性:

编号属性描述
1IsFixedSize获取一个值,指示 Array 是否具有固定大小。
2IsReadOnly获取一个值,指示数组是否是只读。
3Length获取一个 32 位整数,表示数组所有维度中的元素总数。
4LongLength获取一个 64 位整数,它表示数组中所有维的元素总数。
5Rank获取数组的等级(维数)。
Array 类的方法

下面提供了 Array 类的一些最常用的方法:

编号方法描述
1Public Shared Sub Clear (array As Array, index As Integer, length As Integer)根据元素类型,将数组中的元素范围设置为零,为 false 或为 null
2Public Shared Sub Copy (sourceArray As Array, destinationArray As Array, length As Integer)从第一个元素开始,从 Array 中复制一系列元素,并将它们粘贴到第一个元素开始的另一个 Array 中。长度被指定为 32 位整数。
3Public Sub CopyTo (array As Array, index As Integer)将当前一维数组的所有元素复制到指定的一维数组,从指定的目标数组索引开始。该索引被指定为一个 32 位整数。
4Public Function GetLength (dimension As Integer) As Integer获取一个 32 位整数,该整数表示 Array 的指定维度中的元素数。
5Public Function GetLongLength (dimension As Integer) As Long获取一个 64 位整数,它表示 Array 的指定维度中的元素数。
6Public Function GetLowerBound (dimension As Integer) As Integer获取数组中指定维度的下限。
7Public Function GetType As Type获取当前实例的 Type (从 Object 继承)。
8Public Function GetUpperBound (dimension As Integer) As Integer获取数组中指定维的上界。
9Public Function GetValue (index As Integer) As Object获取一维数组中指定位置的值。该索引被指定为一个 32 位整数。
10Public Shared Function IndexOf (array As Array,value As Object) As Integer搜索指定的对象并返回整个一维数组中第一个匹配项的索引。
11Public Shared Sub Reverse (array As Array)颠倒整个一维数组中元素的顺序。
12Public Sub SetValue (value As Object, index As Integer)将值设置为一维数组中指定位置的元素。索引被指定为一个 32 位整数。
13Public Shared Sub Sort (array As Array)使用 Array 的每个元素的 IComparable 实现对整个一维 Array 中的元素进行排序。
14Public Overridable Function ToString As String返回表示当前对象的字符串(从 Object 继承)。
实例

以下程序演示如何使用 Array 类的一些方法:

  1. Module arrayApl
  2. Sub Main()
  3. Dim list As Integer() = {34, 72, 13, 44, 25, 30, 10}
  4. Dim temp As Integer() = list
  5. Dim i As Integer
  6. Console.Write("Original Array: ")
  7. For Each i In list
  8. Console.Write("{0} ", i)
  9. Next i
  10. Console.WriteLine()
  11. ' reverse the array
  12. Array.Reverse(temp)
  13. Console.Write("Reversed Array: ")
  14. For Each i In temp
  15. Console.Write("{0} ", i)
  16. Next i
  17. Console.WriteLine()
  18. 'sort the array
  19. Array.Sort(list)
  20. Console.Write("Sorted Array: ")
  21. For Each i In list
  22. Console.Write("{0} ", i)
  23. Next i
  24. Console.WriteLine()
  25. Console.ReadKey()
  26. End Sub
  27. End Module

结果如下:

  1. Original Array: 34 72 13 44 25 30 10
  2. Reversed Array: 10 30 25 44 13 72 34
  3. Sorted Array: 10 13 25 30 34 44 72