陣列儲存相同型別的元素的固定大小的順序集合。陣列用於儲存資料集合,但將陣列視為相同型別的變數集合通常更有用。
所有陣列都由連續的記憶體位置組成。最低地址對應於第一個元素,最高地址對應最後一個元素。如下圖示 -
要在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)
其中,
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
類是VB.Net中所有陣列的基礎類別。它在System
名稱空間中定義。Array
類提供了各種屬性和方法來處理陣列。
陣列類的屬性
下表提供了Array
類的一些最常用的屬性:
編號 | 屬性 | 描述 |
---|---|---|
1 | IsFixedSize |
獲取一個值,指示Array 是否具有固定大小。 |
2 | IsReadOnly |
獲取一個值,指示陣列是否是唯讀。 |
3 | Length |
獲取一個32 位整數,表示陣列所有維度中的元素總數。 |
4 | LongLength |
獲取一個64 位整數,它表示陣列中所有維的元素總數。 |
5 | Rank |
獲取陣列的等級(維數)。 |
下表提供了一些最常用的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