VB.Net - 数组

数组存储相同类型元素的固定大小顺序集合.数组用于存储数据集合,但将数组视为相同类型的变量集合通常更有用.

所有数组都包含连续的内存位置.最低地址对应第一个元素,最高地址对应最后一个元素.

VB中的数组.Net

在VB.Net中创建数组

要在VB.Net中声明数组,请使用Dim语句.例如,

Dim intData(30)	  ' an array of 31 elements
Dim strData(20) As String	' an array of 21 strings
Dim twoDarray(10, 20) As Integer	'a two dimensional array of integers
Dim ranges(10, 100)	 'a two dimensional array


您还可以在声明数组时初始化数组元素.例如,

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 arrayApl
   Sub 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 10
          n(i) = i + 100 ' set element at location i to i + 100 
      Next i
      ' output each array element's value '
      
      For j = 0 To 10
          Console.WriteLine("Element({0}) = {1}", j, n(j))
      Next j
      Console.ReadKey()
   End Sub
End Module


编译并执行上述代码时,会产生以下结果 :

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


动态数组

动态数组是可以根据程序需要确定尺寸和重新标注尺寸的数组.您可以使用 ReDim 语句声明动态数组.

ReDim语句的语法 :

ReDim [Preserve] arrayname(subscripts)


其中,

  • 当您调整大小时,保留关键字有助于保留现有数组中的数据.

  • arrayname 是要重新标注的数组的名称.

  • 下标指定新维度.

Module arrayApl
   Sub Main()
      Dim marks() As Integer
      ReDim marks(2)
      marks(0) = 85
      marks(1) = 75
      marks(2) = 90
     
      ReDim Preserve marks(10)
      marks(3) = 80
      marks(4) = 76
      marks(5) = 92
      marks(6) = 99
      marks(7) = 79
      marks(8) = 75
      
      For i = 0 To 10
         Console.WriteLine(i & vbTab & marks(i))
      Next i
      Console.ReadKey()
   End Sub
End Module


当编译并执行上述代码时,它会产生以下结果 :

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


多维数组

VB.Net允许多维数组.多维数组也称为矩形数组.

您可以将字符串的二维数组声明为 :

Dim twoDStringArray(10, 20) As String


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

Dim threeDIntArray(10, 10, 10) As Integer


以下程序演示如何创建和使用二维数组 :

Module arrayApl
   Sub Main()
      ' an array with 5 rows and 2 columns
      Dim 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 4
          For j = 0 To 1
              Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i, j))
          Next j
      Next i
      Console.ReadKey()
   End Sub
End Module


编译并执行上述代码时,会产生以下结果 :

a[0,0]: 0
a[0,1]: 0
a[1,0]: 1
a[1,1]: 2
a[2,0]: 2
a[2,1]: 4
a[3,0]: 3
a[3,1]: 6
a[4,0]: 4
a[4,1]: 8


Jagged Array

Jagged数组是一个数组数组.下面的代码显示了一个名为得分的整数和负号的锯齿状数组;

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


以下示例说明使用锯齿状数组 :

在线演示

Module arrayApl
   Sub Main()
      'a jagged array of 5 array of integers
      Dim 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 value 
      
      For i = 0 To 4
         For j = 0 To 1
            Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i)(j))
         Next j
      Next i
      Console.ReadKey()
   End Sub
End Module


当编译并执行上述代码时,它会产生以下结果 :

a[0][0]: 0
a[0][1]: 0
a[1][0]: 1
a[1][1]: 2
a[2][0]: 2
a[2][1]: 4
a[3][0]: 3
a[3][1]: 6
a[4][0]: 4
a[4][1]: 8


数组类

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

数组类的属性

下表提供了一些最常用的属性和方法数组类的属性 :

Sr.NoProperty Name&描述
1

IsFixedSize

获取一个值,该值指示数组是否具有固定大小.

2

IsReadOnly

获取一个值,该值指示数组是否为只读.

3

Length

获取32位整数,表示数组所有维度中元素的总数.

4

LongLength

获取64-位整数,表示数组所有维度中元素的总数.

5

Rank

获取等级(数量)数组的维度.

数组类的方法

下表提供了数组类中最常用的方法 :

Sr.No方法名称&描述
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)

副本当前一维Array的所有元素到指定的一维Array从指定的目标Array索引开始.索引被指定为32位整数.

4

Public Function GetLength (dimension As Integer) As Integer

获取32 -bit integer,表示Array指定维度中的元素数.

5

Public Function GetLongLength (dimension As Integer) As Long

获取一个64位整数,表示数组指定维度中的元素数.

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)

对元素进行排序使用数组中每个元素的IComparable实现的整个一维数组.

14

Public Overridable Function ToString As String

返回表示当前对象的字符串(继承自Object).

完整有关Array类属性和方法的列表,请参阅Microsoft文档.

示例

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

Module arrayApl
   Sub Main()
      Dim list As Integer() = {34, 72, 13, 44, 25, 30, 10}
      Dim temp As Integer() = list
      Dim i As Integer
      Console.Write("Original Array: ")
      
      For Each i In list
         Console.Write("{0} ", i)
      Next i
      Console.WriteLine()
      ' reverse the array
      Array.Reverse(temp)
      Console.Write("Reversed Array: ")
      
      For Each i In temp
         Console.Write("{0} ", i)
      Next i
      Console.WriteLine()
      'sort the array
      Array.Sort(list)
      Console.Write("Sorted Array: ")
      
      For Each i In list
         Console.Write("{0} ", i)
      Next i
      Console.WriteLine()
      Console.ReadKey()
   End Sub
End Module


编译并执行上述代码时,会产生以下结果 :

Original Array: 34 72 13 44 25 30 10
Reversed Array: 10 30 25 44 13 72 34
Sorted Array: 10 13 25 30 34 44 72