企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
{% raw %} # Visual Basic 数组 > 原文: [https://zetcode.com/lang/visualbasic/arrays/](https://zetcode.com/lang/visualbasic/arrays/) 在 Visual Basic 编程教程的这一部分中,我们将介绍数组。 我们将初始化数组并从中读取数据。 数组是数据的集合。 变量一次只能容纳一项。 数组可以容纳多个项目。 这些项目称为数组的元素。 数组存储相同数据类型的数据。 每个元素都可以由索引引用。 数组从零开始。 第一个元素的索引为零。 集合具有相似的目的。 它们比数组更强大。 它们将在后面描述。 数组用于存储我们应用的数据。 我们声明数组为某种数据类型。 我们指定它们的长度。 我们用数据初始化数组。 我们有几种使用数组的方法。 我们可以修改元素,对其进行排序,复制或搜索。 ## 初始化数组 有几种方法可以在 Visual Basic 中初始化数组。 ```vb Option Strict On Module Example Sub Main() Dim array(5) As Integer array(0) = 3 array(1) = 2 array(2) = 1 array(3) = 5 array(4) = 6 For i As Integer = 0 To array.Length-1 Console.WriteLine(array(i)) Next End Sub End Module ``` 我们声明并初始化一个数值数组。 数组的内容将打印到控制台。 ```vb Dim array(5) As Integer ``` 在这里,我们声明一个包含五个元素的数组。 所有元素都是整数。 ```vb array(0) = 3 array(1) = 2 ... ``` 我们用一些数据初始化数组。 这是分配初始化。 索引在括号中。 数字 3 将成为数组的第一个元素,数字 2 将成为第二个元素。 ```vb For i As Integer = 0 To array.Length-1 Console.WriteLine(array(i)) Next ``` 我们遍历数组并打印其元素。 数组具有`Length`属性,该属性给出数组中元素的数量。 由于数组基于零,因此索引为`0..length-1`。 我们可以在一个语句中声明并初始化一个数组。 ```vb Option Strict On Module Example Sub Main() Dim array() As Integer = { _ 2, 4, 5, 6, 7, 3, 2 } For Each i As Integer In array Console.WriteLine(i) Next End Sub End Module ``` 这是先前程序的修改版本。 ```vb Dim array() As Integer = { _ 2, 4, 5, 6, 7, 3, 2 } ``` 一步就声明并初始化一个数组。 元素在大括号中指定。 我们没有指定数组的长度。 编译器将为我们完成此任务。 ```vb For Each i As Integer In array Console.WriteLine(i) Next ``` 我们使用`For Each`关键字遍历数组并打印其内容。 ## 数组的界限 Visual Basic 具有两个用于获取数组边界的函数。 `LBound()`函数返回数组指定维的最低可用下标。 `UBound()`函数返回数组指定维的最高可用下标。 到目前为止,我们已经处理了一维数组。 ```vb Option Strict On Module Example Dim n1 As Integer Dim n2 As Integer Sub Main() Dim names() As String = { "Jane", "Lucy", _ "Timea", "Beky", "Lenka"} n1 = LBound(names) n2 = UBound(names) Console.WriteLine(n1) Console.WriteLine(n2) For i As Integer = n1 To n2 Console.WriteLine(names(i)) Next End Sub End Module ``` 我们有一系列名称。 我们计算并使用该数组的上下边界。 ```vb n1 = LBound(names) n2 = UBound(names) ``` 在名称数组中,`n1`是最低索引,`n2`是最高索引。 ```vb For i As Integer = n1 To n2 Console.WriteLine(names(i)) Next ``` 我们使用数组的上下边界检查数组。 ```vb $ ./bounds.exe 0 4 Jane Lucy Timea Beky Lenka ``` 示例的输出。 ## 数组大小 到目前为止,我们已经处理了一维数组。 指定元素所需的索引数称为数组的维或等级。 我们将使用二维数组。 ```vb Option Strict On Module Example Sub Main() Dim numbers(,) As Integer = { {2, 1}, {3, 5}, _ {4, 4}, {7, 2}, {0, 0} } For i As Integer = 0 To UBound(numbers, 1) For j As Integer = 0 To UBound(numbers, 2) Console.Write(CStr(numbers(i, j)) + " ") Next j Console.Write(vbNewLine) Next i End Sub End Module ``` 如果我们需要两个索引来访问数组中的元素,那么我们将拥有一个二维数组。 ```vb Dim numbers(,) As Integer = { {2, 1}, {3, 5}, _ {4, 4}, {7, 2}, {0, 0} } ``` 我们在一个语句中声明并初始化一个二维数组。 请注意数组名称后面括号内的逗号。 ```vb For i As Integer = 0 To UBound(numbers, 1) For j As Integer = 0 To UBound(numbers, 2) Console.Write(CStr(numbers(i, j)) + " ") Next j Console.Write(vbNewLine) Next i ``` 我们需要两个循环才能从二维数组中获取数据。 `UBound()`函数具有可选的第二个参数`rank`。 这是我们检索最高索引的维度。 如果省略等级,则假定为 1 维。 ```vb $ ./twodimensions.exe 2 1 3 5 4 4 7 2 0 0 ``` 代码示例的输出。 接下来,我们将处理三维数组。 ```vb Option Strict On Module Example Sub Main() Dim i As Integer Dim j As Integer Dim k As Integer Dim nums(,,) As Integer = { _ {{12, 2, 8}}, _ {{14, 5, 2}}, _ {{3, 26, 9}}, _ {{4, 11, 2}} _ } For i = 0 To UBound(nums, 1) For j = 0 To UBound(nums, 2) For k = 0 To UBound(nums, 3) Console.Write(CStr(nums(i, j, k)) + " ") Next k Next j Console.Write(vbNewLine) Next i End Sub End Module ``` 我们有一个数字三维数组。 同样,我们用数字初始化数组并将其打印到终端。 ```vb Dim nums(,,) As Integer = { _ {{12, 2, 8}}, _ {{14, 5, 2}}, _ {{3, 26, 9}}, _ {{4, 11, 2}} _ } ``` 左括号和右括号之间还有另一个逗号。 ```vb For k = 0 To UBound(nums, 3) Console.Write(CStr(nums(i, j, k)) + " ") Next k ``` 该循环经过三维。 我们使用三个索引从数组中检索值。 ```vb $ ./3darray.exe 12 2 8 14 5 2 3 26 9 4 11 2 ``` 我们将三维数组的内容打印到控制台。 有一个`Rank()`函数,它给出数组的维数。 ```vb Option Strict On Module Example Sub Main() Dim array1() As Integer = {1, 2} Dim array2(,) As Integer = { { 1 }, { 2 } } Dim array3(, ,) As Integer = { { { 1, 2 }, { 2, 1 } } } Console.WriteLine(array1.Rank()) Console.WriteLine(array2.Rank()) Console.WriteLine(array3.Rank()) End Sub End Module ``` 我们有三个数组。 我们使用`Rank()`函数来获取每个大小的大小。 ```vb Console.WriteLine(array1.Rank()) ``` 在这里,我们获得第一个数组的排名。 ## 锯齿状数组 具有相同大小元素的数组称为矩形数组。 相反,具有不同大小元素的数组称为锯齿状数组。 锯齿状数组的声明和初始化方式不同。 ```vb Option Strict On Module Example Sub Main() Dim jagged As Integer()() = New Integer(4)() {} jagged(0) = New Integer() {1} jagged(1) = New Integer() {3, 4} jagged(2) = New Integer() {5, 6, 7} jagged(3) = New Integer() {5, 6} jagged(4) = New Integer() {9} For i As Integer = 0 To jagged.GetUpperBound(0) For j As Integer = 0 To jagged(i).GetUpperBound(0) Console.Write(jagged(i)(j) & " ") Next Console.Write(vbNewLine) Next End Sub End Module ``` 这是一个锯齿状数组的示例。 ```vb Dim jagged As Integer()() = New Integer(4)() {} ``` 这是锯齿状数组的声明。 我们有一个数组数组。 更具体地说,我们声明了一个数组,该数组具有五个整数数据类型的数组。 ```vb jagged(0) = New Integer() {1} jagged(1) = New Integer() {3, 4} ... ``` 每个数组必须单独初始化。 ```vb Console.Write(jagged(i)(j) & " ") ``` 与矩形数组不同,每个索引都用括号括起来。 ## 数组方法 有多种使用数组的方法。 这些方法可用于检索,修改数据,排序,复制,搜索数据。 我们使用的这些方法是`Array`类的静态方法或数组对象的成员方法。 ```vb Option Strict On Module Example Sub Main() Dim names() As String = {"Jane", "Frank", "Alice", "Tom" } Array.Sort(names) For Each el As String In names Console.Write(el + " ") Next Console.Write(vbNewLine) Array.Reverse(names) For Each el As String In names Console.Write(el + " ") Next Console.Write(vbNewLine) End Sub End Module ``` 在此示例中,我们对数据进行排序。 ```vb Dim names() As String = {"Jane", "Frank", "Alice", "Tom" } ``` 我们有一个字符串数组。 ```vb Array.Sort(names) ``` `Sort()`方法按字母顺序对数据进行排序。 ```vb Array.Reverse(names) ``` `Reverse()`方法反转整个一维数组中元素的顺序。 ```vb $ ./sorting.exe Alice Frank Jane Tom Tom Jane Frank Alice ``` 我们已经按升序和降序对名称进行了排序。 以下示例使用`SeValue()`,`GetValue()`,`IndexOf()`,`Copy()`和`Clear()`方法。 ```vb Option Strict On Module Example Dim names() As String = {"Jane", "Frank", "Alice", "Tom" } Dim girls(0 To 3) As String Sub Main() names.SetValue("Beky", 1) names.SetValue("Erzebeth", 3) Console.WriteLine(names.GetValue(1)) Console.WriteLine(names.GetValue(3)) Console.WriteLine(Array.IndexOf(names, "Erzebeth")) Array.Copy(names, girls, names.Length) For Each el As String In girls Console.Write(el + " ") Next Console.Write(vbNewLine) Array.Clear(names, 0, 2) For Each el As String In names Console.Write(el + " ") Next Console.Write(vbNewLine) End Sub End Module ``` 本示例介绍了其他方法。 ```vb Dim girls(0 To 3) As String ``` 声明数组的另一种方法。 ```vb names.SetValue("Beky", 1) names.SetValue("Erzebeth", 3) ``` `SetValue()`为数组中的特定索引设置一个值。 ```vb Console.WriteLine(names.GetValue(1)) Console.WriteLine(names.GetValue(3)) ``` 我们使用`GetValue()`方法从数组中检索值。 ```vb Console.WriteLine(Array.IndexOf(names, "Erzebeth")) ``` `IndexOf()`方法返回首次出现特定值的索引。 ```vb Array.Copy(names, girls, names.Length) ``` `Copy()`方法将值从源数组复制到目标数组。 第一个参数是源数组,第二个参数是目标数组。 第三个参数是长度; 它指定要复制的元素数。 ```vb Array.Clear(names, 0, 2) ``` `Clear()`方法从数组中清除元素。 它需要三个参数,即数组,起始索引和要从索引中清除的元素数。 在 Visual Basic 教程的这一部分中,我们使用了数组。 我们描述了各种类型的数组和使用它们的方法。 {% endraw %}