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