Visual Basic .NET/陣列
外觀
陣列只是一個可以儲存多個數據的變數。資料被儲存在一個列表中。如果你宣告一個整數,那麼該變數只能儲存一個整數。一個整數陣列可以儲存多個整數。每一個都有它自己的編號。
例如,這行程式碼
Dim MyArray(5) As Integer
將得到一個像這樣的陣列
| 索引 | 資料 |
| 00 | 無 |
| 01 | 無 |
| 02 | 無 |
| 03 | 無 |
| 04 | 無 |
| 05 | 無 |
Dim arrayName(upperBound) As arrayType
這類似於宣告一個普通變數,但有一點區別,就是upperBound引數。與之前的Visual Basic版本不同,Visual Basic .NET中的所有陣列都從0開始,到upperBound結束,例如
Dim MyArray(10) As Integer
將宣告一個名為MyArray的變數,它有11個整數的空間。這些整數儲存在MyArray(0)、MyArray(1)、...、MyArray(10)中。
要宣告一個數組並在同一行中賦值,請使用以下程式碼
Dim MyArray() As Integer = New Integer(4) { 1, 2, 3, 4, 5 }
另一種建立陣列的方法如下
Module Module1
Sub Main()
Dim MyArray As System.Array
MyArray = System.Array.CreateInstance(GetType(String), 4)
MyArray(0) = "a"
MyArray(1) = "b"
MyArray(2) = "c"
MyArray(3) = "d"
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
End Module
注意,無論何時使用以下這些程式碼
Dim MyArray As System.Array
MyArray = System.Array.CreateInstance(GetType(String), 4)
這表示相同的意思,而且更容易使用
MyArray = System.Array.CreateInstance(GetType(String), 4)
變數名稱後的(number)宣告它是一個字串。
要訪問陣列中的一個元素
Module Module1
Sub Main()
Dim MyArray As System.Array
MyArray = System.Array.CreateInstance(GetType(String), 4)
MyArray(0) = "a"
MyArray(1) = "b"
MyArray(2) = "c"
MyArray(3) = "d"
Console.WriteLine(MyArray.GetValue(2)) 'returns c
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
End Module
我們陣列中有多少個元素?
Module Module1
Sub Main()
'
Dim MyArray As System.Array
MyArray = System.Array.CreateInstance(GetType(String), 4)
MyArray(0) = "a"
MyArray(1) = "b"
MyArray(2) = "c"
MyArray(3) = "d"
Console.WriteLine(MyArray.Length)
'displays 4
Console.WriteLine("Press enter to continue")
Console.ReadLine()
'
End Sub
End Module
顯示陣列中的所有元素。
Module Module1
Sub Main()
'
Dim MyArray As System.Array
Dim En As System.Collections.IEnumerator
MyArray = System.Array.CreateInstance(GetType(String), 4)
'
MyArray(0) = "a"
MyArray(1) = "d"
MyArray(2) = "b"
MyArray(3) = "c"
En = MyArray.GetEnumerator
'
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
'
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
End Module
對陣列進行排序。
Module Module1
Sub Main()
'
Dim MyArray As System.Array
Dim En As System.Collections.IEnumerator
MyArray = System.Array.CreateInstance(GetType(String), 4)
'
MyArray(0) = "a"
MyArray(1) = "d"
MyArray(2) = "b"
MyArray(3) = "c"
En = MyArray.GetEnumerator
Console.WriteLine("Before sorting")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Array.Sort(MyArray)
En = MyArray.GetEnumerator
Console.WriteLine("After sorting")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
'
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
End Module
按降序排序。
Module Module1
Sub Main()
'
Dim MyArray As System.Array
Dim En As System.Collections.IEnumerator
Dim DescSortCompare = New DescSortCompareClass
MyArray = System.Array.CreateInstance(GetType(String), 4)
'
MyArray(0) = "a"
MyArray(1) = "d"
MyArray(2) = "b"
MyArray(3) = "c"
En = MyArray.GetEnumerator
Console.WriteLine("Before descending sort")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Array.Sort(MyArray, DescSortCompare)
En = MyArray.GetEnumerator
Console.WriteLine("After descending sort")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
'
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
'
Public Class DescSortCompareClass
Implements IComparer
'
Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements IComparer.Compare
Return x > y
End Function
'
End Class
End Module
反轉陣列。
Module Module1
Sub Main()
'
Dim MyArray As System.Array
Dim En As System.Collections.IEnumerator
MyArray = System.Array.CreateInstance(GetType(String), 4)
'
MyArray(0) = "a"
MyArray(1) = "d"
MyArray(2) = "b"
MyArray(3) = "c"
En = MyArray.GetEnumerator
Console.WriteLine("Before reversing the array")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Array.Reverse(MyArray)
En = MyArray.GetEnumerator
Console.WriteLine("After reversing the array")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
'
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
'
End Module
現在我們有了Reverse,這裡有另一種在不使用IComparer的情況下進行降序排序的方法。
Module Module1
Sub Main()
'
Dim MyArray As System.Array
Dim En As System.Collections.IEnumerator
MyArray = System.Array.CreateInstance(GetType(String), 4)
'
MyArray(0) = "a"
MyArray(1) = "d"
MyArray(2) = "b"
MyArray(3) = "c"
'
En = MyArray.GetEnumerator
Console.WriteLine("Before descending sort")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Array.Sort(MyArray)
Array.Reverse(MyArray)
En = MyArray.GetEnumerator
Console.WriteLine("After descending sort")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
'
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
End Module
在使用 Option Strict On 的情況下,我們需要使用 SetValue 來賦值陣列元素。
Option Strict On
Module Module1
Sub Main()
'
Dim MyArray As System.Array
Dim En As System.Collections.IEnumerator
MyArray = System.Array.CreateInstance(GetType(String), 4)
'
MyArray.SetValue("a", 0)
MyArray.SetValue("d", 1)
MyArray.SetValue("b", 2)
MyArray.SetValue("c", 3)
'
En = MyArray.GetEnumerator
Console.WriteLine("Before descending sort")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Array.Sort(MyArray)
Array.Reverse(MyArray)
En = MyArray.GetEnumerator
Console.WriteLine("After descending sort")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
'
Console.WriteLine("Press enter to continue")
Console.ReadLine()
End Sub
End Module
陣列也可以是多維的 - 2D、3D、4D 等。例如,這行程式碼
'Declare an 2D Array with integers(X, Y)
Dim My2DArray(2, 2) As Integer
將得到一個像這樣的陣列
| 索引 | 資料 |
| 0, 0 | 無 |
| 0, 1 | 無 |
| 0, 2 | 無 |
| 1, 0 | 無 |
| 1, 1 | 無 |
| 1, 2 | 無 |
| 2, 0 | 無 |
| 2, 1 | 無 |
| 2, 2 | 無 |
2D 陣列可以用於像井字遊戲這樣的遊戲中。
3D 陣列可以被認為是 2D 陣列的陣列。2D 陣列有行和列,就像井字遊戲中一樣,3D 陣列儲存多個井字遊戲的網格。
要宣告一個 3D 陣列
'Declare an 3D Array of integers(X, Y)
Dim My3DArray(1, 2, 2) As Integer
在這個例子中,第一維通常是這個 3D 陣列中的陣列數量。我們知道這些是 2D 陣列,因為第二維指定了這些陣列中的行數,第三維指定了列數。
Split(): 將字串轉換為陣列,根據引數中指定的分割符。Join(): 將陣列轉換為字串。Filter(): 篩選一些陣列條目。
示例
Module Module1
Sub Main()
Dim ArrayName() As String = Split("lorem ipsum dolor sit", " ")
Console.WriteLine(ArrayName(1)) ' displays "ipsum"
ArrayName(4) = "amet"
Dim ArrayContent As String = String.Join(" ", ArrayName)
Console.WriteLine(ArrayContent)
Dim SubArray = Filter(ArrayName, "o", True, CompareMethod.Text)
Console.WriteLine(String.Join(" ", SubArray)) ' displays the words including "o"
Console.ReadLine()
End Sub
End Module