_
caseBanner
当前位置:首页 > 新闻资讯
VB.NET学习笔记:数据类型-数组(动态数组,二维数组)的定义和使用
发布时间:2021-03-31 22:14:21 浏览: 138次 来源:【jake推荐】 作者:-=Jake=-

官方帮助页面:Visual Basic中的数组

在VB.NET中,您可以使用变量来存储数据,例如存储学生姓名:

dim strname as string="张三"

您可以声明多个变量来存储3年级1级所有学生的姓名。为方便起见,每位学生的编号是:

dim 三年级1班_1 as string="张三"
dim 三年级1班_2 as string="李四"
dim 三年级1班_3 as string="王五"
dim 三年级1班_4 as string="麻二"
……

尽管可行,但很麻烦,并使代码难以维护和扩展。如果该班级的学生增加或减少,则需要修改,重新编译和重新部署应用程序。

一、一维数组

通过使用数组,您可以使用相同的名称和不同的索引来存储和访问上面的多个变量:

        '声明
        Dim 三年级1班(3) As String
        '赋值
        三年级1班(0) = "张三"
        三年级1班(1) = "李四"
        三年级1班(2) = "王五"
        三年级1班(3) = "麻二"
        '访问
        For int As Integer = 0 To 3
            Console.WriteLine("三年级1班" & (int + 1).ToString & "号学生的姓名:  " & 三年级1班(int))
        Next

测试结果如图所示:

在这里插入图片描述

此示例执行三个操作:

1、声明一个包含4个元素的数组“三年级1类(3)”。声明数组中括号中的数字3表示该数组中的最后一个索引。

2、它为数组中的每个元素分配一个值。通过使用数组名称并将单个元素的索引括在括号中,可以访问数组元素。

3、它列出了数组的每个值。此示例使用For语句按索引号访问数组的每个元素。

二、二维数组

如果需要存储三年级所有班级的学生姓名,则可以使用二维数组,这与在Excel中存储数据非常相似。

在这里插入图片描述

Excel将数据存储在二维表中。工作表的名称“三年级”等同于数组的名称。每行都存储一个班级中学生的姓名,单元格地址(例如:C3或数字[3,3]]的意思)等同于数组元素的索引。

通过“工作表名称(行号,列号)”访问Excel数据,例如:三年级(3,3)吉祥博赛狗 ,二维数组也以这种方式访问​​数组中的元素。以下代码:

    '声明一个3行4列二维数组
        Dim 三年级(2, 3) As String
        '为第一行的各列赋值(1班学生姓名)
        三年级(0, 0) = "张三"
        三年级(0, 1) = "李四"
        三年级(0, 2) = "王五"
        三年级(0, 3) = "麻二"
        '为第二行的各列赋值(2班学生姓名)
        三年级(1, 0) = "赵钱"
        三年级(1, 1) = "孙小"
        三年级(1, 2) = "王二"
        三年级(1, 3) = "秦大"
        '为第三行的各列赋值(3班学生姓名)
        三年级(2, 0) = "李一"
        三年级(2, 1) = "赵二"
        三年级(2, 2) = "钱三"
        三年级(2, 3) = "孙四"
        '访问
        For int1 As Integer = 0 To 2 '行
            For int2 As Integer = 0 To 3 '列
                Console.WriteLine("三年级" & (int1 + 1).ToString & "班第" & (int2 + 1).ToString & "号学生的姓名:  " &
                                  三年级(int1, int2) & "  ,索引号为: (" & int1.ToString & "," & int2.ToString & ")")
            Next
        Next

测试结果如图所示:

在这里插入图片描述

可以看出,使用数组比直接声明多个变量更容易。那么什么是数组呢?

三、数组的概念

Array实际上是一个特殊变量,它代表数据的集合。在其中,允许将相同或不同类型的多个数据组合到一个集合中。它们具有公共变量名,然后使用其索引号访问每个元素。这个集合称为数组。

1、数组声明

要使用数组,请首先声明该数组。数组的声明类似于声明单个变量:

        '声明变量
        Dim arr As String
        '声明一维数组
        Dim arr1(3) As String
        '声明二维数组
        Dim arr2(2, 3) As String
        '声明三维数组
        Dim arr3(2, 2, 3) As String

数组的声明比变量的声明多了一个括号。数组的最大索引号写在括号中;如果声明了二维或多维数组,则每个维度的最大索引号由逗号分隔。

除了使用Dim关键字声明数组之外,还可以使用Public或Private关键字声明数组。声明中使用的不同关键字将影响数组的生命周期。 Dim关键字主要用于声明进程级私有数组,Private关键字用于声明模块级或类级别的数组,Public关键字用于模块声明。部分创建一个公共数组,类似于变量的作用域。

程序员可以定义旧VB 6. 0数组的索引号的起始值(例如-1 TO 5),但VB.NET数组的索引始终是一个连续的整数开始)从0到最大索引号,也就是数组元素的数量总是比最大​​索引号多1,因此,TO关键字不是必需的,并且不能用于声明索引号范围。

您还可以使用New子句声明一个数组:

        '一维
        Dim cargoWeights() As Double = New Double(9) {}
        '二维
        Dim hourlyTemperatures(,) As Integer = New Integer(23, 1) {}
        '三维
        Dim januaryInquiries(,,) As String = New String(30, 20, 2) {}

使用New子句时电竞下注app ,必须使用大括号{},并且不能在数组变量声明中指定维的长度。

2、数组分配

声明数组后,您可以按索引号引用数组中的元素,为数组分配值或访问数组中的元素。上面已经解释了,所以在这里跳过。

您还可以在声明数组时为数组赋值。

一维数组:

        Dim str1 As String() = {"%", "&", "@"}
        Dim str2() As String = {"%", "&", "@"}
        Dim str3 As String() = New String(2) {"%", "&", "@"}
        Dim str4() As String = New String(2) {"%", "&", "@"}

注意:1、提供的元素值必须用大括号{}括起来; 2、无法在数组变量声明中指定维的长度。数组将根据元素值的数量推断出数组的大小。

每条语句执行后,将从3、索引号(从0到2、数组)创建数组的长度,并为其分配初始值。

二维数组:

        Dim str1 As String(,) = {{"0-0", "0-1", "0-2"}, {"1-0", "1-1", "1-2"}, {"2-0", "2-1", "2-2"}}
        Dim str2(,) As String = {{"0-0", "0-1", "0-2"}, {"1-0", "1-1", "1-2"}, {"2-0", "2-1", "2-2"}}
        Dim str3 As String(,) = New String(2, 2) {{"0-0", "0-1", "0-2"}, {"1-0", "1-1", "1-2"}, {"2-0", "2-1", "2-2"}}
        Dim str4(,) As String = New String(2, 2) {{"0-0", "0-1", "0-2"}, {"1-0", "1-1", "1-2"}, {"2-0", "2-1", "2-2"}}

提供的元素值必须嵌套在花括号{}中。 {“ 0-0”,“ 0-1”,“ 0-2”}这表示第一行,而“ 0-0”表示第一行和第一列中的值为“ 0-0”。如图所示:

在这里插入图片描述

3、数组的属性和方法

每个数组都继承自System.Array类。您可以使用System.Array类提供一些属性和方法来获取数组的维数,大小vb二维数组,最大索引数等。

([1),等级属性

获取数组的维数。例如,一维数组返回1,二维数组返回2aoa平台 ,依此类推。

([2),Length和LongLength属性

获取所有维度中元素的总数。长度返回一个32位整数,而LongLength返回一个64位整数。

([3),GetLength和GetLongLength方法

获取数组中指定维中的元素数。 GetLength返回32位整数,GetLongLength返回64位整数。

([4),GetLowerBound方法

获取数组中指定维的第一个元素的索引。返回一个32位整数。

([5),GetUpperBound方法

获取数组中指定维的最后一个元素的索引(32位整数)。如果指定的维为空,则返回-1。

示例代码:

        Dim arr(,) As String = {{"0-0", "0-1", "0-2"}, {"1-0", "1-1", "1-2"}, {"2-0", "2-1", "2-2"}}
        Dim intRank As Integer = arr.Rank '获取维数
        Dim intLength As Integer = arr.Length '获取所有维数中元素的总数
        '嵌套循环每一维度(从第一个元素索引号到最后一个元素索引号)
        For int1 As Integer = arr.GetLowerBound(0) To arr.GetUpperBound(0)
            For int2 As Integer = arr.GetLowerBound(1) To arr.GetUpperBound(1)
                Console.WriteLine("(" & int1.ToString & "," & int2.ToString & ")    " & arr(int1, int2))
            Next
        Next
        
        '也可以不使用嵌套循环获取元素值
        For Each arr1 As String In arr
            Console.WriteLine(arr1)
        Next

还有很多其他方法,请参考官方帮助自己。

三、动态数组

有时无法在程序运行之前确认数组的大小vb二维数组,并且需要在程序运行时动态确定数组的大小,这称为动态数组。

1、动态数组的声明

与常规数组声明相同,不同之处在于您无需在括号中填写每个维度的最大索引号(将其保留为空白)。如

        '声明一维动态数组
        Dim arr1() As Integer
        '声明二维动态数组
        Dim arr2(,) As Integer

声明在括号中需要使用动态二维数组。这与旧的VB 6. 0声明不同。旧的VB 6. 0不需要关心维度,只要它是一个动态数组,声明就如下:

         '声明动态数组(一维、二维等)
        Dim arr1() As Integer

2、使用ReDim语句动态分配数组大小

使用ReDim语句更改已声明数组的一个或多个维的大小。语法:

ReDim [保留]名称(绑定列表)[,名称(绑定列表)[,…]]

参数:

保留-可选。修饰符,用于仅更改最后一个维度的大小时将数据保留在现有数组中。

name-必填。数组变量的名称。请参阅声明的元素名称。

boundlist是必需的。列出重新定义的数组的每个维度的边界。

        '分配大小
        ReDim arr1(1)
        ReDim arr2(1, 1)

ReDim语句只能在流程级别使用。 ReDim语句可以更改每个维中的元素数,但是它不能更改数组变量或其元素的数据类型,也不能更改数组的维数,也不能为数组提供新的元素。初始化值(使用数组元素的数据类型的默认值初始化这些元素)。

如果要更改数组的大小但要保留原始数据,则可以使用Preserve,但只能调整数组最后一个维度的大小。对于其他每个维度,必须指定现有数组的边界。如:

        ReDim Preserve arr1(2)
        ReDim Preserve arr2(1, 2)

关于使用或不使用Preserve关键字的区别,请参见下面的完整示例代码:

        '声明一维动态数组
        Dim arr1() As Integer
        '声明二维动态数组
        Dim arr2(,) As Integer
        '分配大小
        ReDim arr1(1)
        ReDim arr2(1, 1)
        '赋值
        For Each int As Integer In arr1
            arr1(int) = int + 1
        Next
        For int1 As Integer = 0 To arr2.GetUpperBound(0)
            For int2 As Integer = 0 To arr2.GetUpperBound(1)
                arr2(int1, int2) = int1 + int2
            Next
        Next
        '重新分配大小,请单步执行,观察Preserve关键字的作用
        ReDim Preserve arr1(2)
        ReDim Preserve arr2(1, 2)
        ReDim arr1(3)
        ReDim arr2(2, 3)

四、使用数组的注意事项

1、尺寸长度:

每个维度的索引都基于0,这意味着它的范围是从0到上限。因此,给定维的长度大于该维声明的上限。

2、长度限制:

数组每个维度的长度限制为Integer数据类型的最大值,即Int3 2. MaxValue或(2 ^ 3 1) -1。也受系统上可用内存的限制。如果尝试初始化超出可用内存量的数组YABO平台 ,则会在运行时引发OutOfMemoryException。

3、大小和元素大小:

数组的大小与元素的数据类型无关。大小始终代表元素的总数(而不是所占用的内存字节数)。

4、内存消耗:

对数组在内存中的存储方式进行假设是不可靠的。由于具有不同数据宽度的平台上的存储会有所不同,因此同一阵列在64位系统上可能比32位系统上占用更多的内存。取决于数组初始化时的系统配置,公共语言运行库(CLR)可以分配尽可能接近包元素的存储,或在自然硬件边界上对齐它们。另外AG游乐城 ,阵列需要存储开销控制信息,并且每添加一个维度,开销就会增加。

5、尺寸限制:

除了一维和二维数组外,还有3维,4维...在Visual Basic.NET中,数组的维数最多不超过32个。

返回列表
二维码
扫一扫,在线询价