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)

其中,

  • Preserve關鍵字有助於在調整大小時保留現有陣列中的資料。
  • arrayname是要重新維度的陣列的名稱。
  • subscripts指定新的維度。
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允許多維陣列,多維陣列也被稱為矩形陣列。可以宣告一個2維的字串陣列:

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)陣列是陣列的陣列。下面的程式碼顯示了宣告一個名為 scores 的鋸齒狀陣列:

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類

Array類是VB.Net中所有陣列的基礎類別。它在System名稱空間中定義。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類屬性和方法的完整列表,請參閱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