VB.NET数组的定义动态使⽤多维数组
我们都知道在所有程序设计语⾔中数组都是⼀个⾮常重要的概念,数组的作⽤是允许程序员⽤同⼀个名称来引⽤多个变量,因此采⽤数组索引来区分这些变量。很多情况下利⽤数组索引来设置⼀个循环,这样就可以⾼效地处理复杂的情况,因此在很多情况下,使⽤数组可以缩短或者简化程序的代码。本⽂主要介绍VB.NET数组的使⽤,希望对⼤家的使⽤带来帮助。
数组中的第⼀个元素的下标称为下界,最后⼀个元素的下标称为上界,其余的元素连续地分布在上下界之间,并且数组在内存中也是⽤连续的区域来存储的,所以要求声明数组每维的长度不能超过Long数据类型的最⼤值,即264—1=263。
我们把VB.NET数组当作⼀个对象来处理,这就意味着数组类型是单个引⽤类型,数组变量包含指向构成数组元素、数组维和数组长度等数据的指针,数组之间互相赋值其实只是在相互复制指针,⽽且数组继承了System名字空间的Array类。
VB.NET中提供的数组类型和VB 6.0中有⼀些差别,我们将在下⾯做详细的讲解。
(1)VB.NET数组的声明
VB.NET中的数组有两种类型:定长数组和动态数组。这⾥先介绍定长数组的⼏种不同的声明⽅式,不
同的声明⽅法将导致数组不同的有效范围。
◆Dim语句在模块段建⽴模块级数组,例如:
1. Dim arrayl(3)As Integer
◆Public语句在模块的声明部分建⽴⼀个公共数组,例如:
1. Public counttype(20)as string
◆Static语句声明⼀个过程内的局部数组,例如:
1. Public Sub Ipaddress()
2. Static server(30)as string
3. End Sub
VB.NET还提供了新的数组初始化语法,只需要简单的语句就可以完成数组的声明和初始化,例如:
1. New array initialization syntax
2. Dim arrayl As Integer()={2,4,8}
在VB.NET中,为了和其他语⾔更加易于协同操作,数组的下标均设定为0,不允许声明⼀个下界为1的数组,因此Option Base语句不再被VB.NET⽀持,⽽且在声明⼀个数组时必须⽤它的元素个数,⽽不是它的上界来初始化,例如:
1. //声明⼀个⼀维数组具有3个元素,下标从0~2
2. Dim arrayl(3)As Integer
3. arrayl(0):2
4. arrayl(1)=4
5. arrayl(2)=8
以上声明的数组有三个元素,下标从0到2,如果代码企图访问下标为3的数组元素,将引起运⾏错误。
(2)⼆维数组及多维数组
除了较为简单的⼀维数组外,VB.NET还⽀持多维数组,其声明⽅法和⼀维数组没有太⼤的区别,例
如:
1. StatiC multidim(10,10)as double
2. Public Singledim(5,8,10,3)as single
以上语句声明了⼀个lO⾏,10列的⼆维数组。在VB.NET中,数组最多有32维,⽽且每⼀维的长度都不能够超过Long数组类型的最⼤值。数组总尺⼨的限制是不⼀样的,这与所采⽤的操作系统以及计算机中使⽤的内存量有关。数组的维数将保留在System.Array.Rank 属性中,每维的长度可以由System.Array.GetLengfll⽅法来得到。需要提醒注意的是,由于VB.NET中数组是以0为基的,如果返回来的值为9,则表⽰数组是10维的。当为数组继续添加维数的时候,使其扩展为多位数组,此时会使数组所需的存储空间⼤幅度增加,所以在使⽤多维数组时对这个⽅⾯也要多加考虑。
另外VB.NET还提供了Lbound()和Lbound()两个函数来返回数组的上、下界。中国⾃学编程⽹整理发布 ,bc对于⼀维数组⽽⾔,只需要⼀个参数,那便是数组名。例如:
1. one==Ubound(arrayl)
对于多位数组,也只是简单地将逗号后⾯的第⼆个参数指定为数组的第⼏维。例如:
1. tw0=Lbound(multidim,7)
如果没有指明是哪⼀维,系统默认为第⼀维。
(3)动态数组
有时在程序运⾏之前⽆法确认数组的⼤⼩,VB.NET提供了在程序运⾏时动态决定数组⼤⼩的功能,即动态数组。它具有灵活多变的特点,可以在任何时候根据需要随时改变数组的⼤⼩,有助于内存的管理。建⽴⼀个动态数组的详细步骤如下:
①和声明⼀般数组⼀样,可以使⽤前⾯介绍的⼏种声明,只是赋⼀个空维数组,这样就将数组声明为动态数组。典型的声明语句为:
1. Dim types( ) As integer
②然后使⽤ReDim语句来配置数组⼤⼩。ReDim语句声明只能在过程当中使⽤,它是可执⾏语句,可以改变数组中元素的个数,但是却不可以改变数组的维数,就是说不能把⼀维变为⼆维。在ReDim语句配置数组元素个数时,数组中的内容将全部置为0。典型语句为:
1. ReDim Types(X+1)
③如果想改变数组⼤⼩⼜不想丢失原来的数据,只要在ReDim语句中包含Preserve关键字就可以,典型语句为:
1. ReDa_m PresetVe Types(10,23)
对于多维数组,在使⽤Preserve关键字时,只能修改最后⼀维的⼤⼩。如果改变其他维,那么将出现运⾏错误。如果不清楚某维的当前⼤⼩,可以使⽤GetI~ength函数来获取。
(4)VB.NET数组的使⽤
在’VB 6.0中,可以⽤For Each来循环遍历⼀个数组。例如:
1. Dim x As Integer
2. F0r Each x In arrayl
3. Console.WriteLine(x)
4. Next
在VB.NET中可以使⽤For循环和数组长度来遍历⼀个数组。例如:
1. Dim i As⼯nteger
2. F0r i=0 T0 (arrayl.Length-1)
3.
4. Console.WriteLine(arrayl(1)J
5. Next i
在使⽤数组时还要注意,不仅声明语法有变化,⽽且在运⾏时处理⽅式也有了很⼤的变化。VB.NET在堆栈中给数组分配地址空间,当向⼀个⽅法传递数组类型的参数时,使⽤的是引⽤传递⽽不是值传递。下⾯是互相传递数组引⽤的三个⽅法:
1. Dim arrayl(3,3)AS Integer
2. Dim array2 As Integer(,)
3. Redim array2(3,3)
4. Dim array3 As Integer(,)={{2,4},{12,29}}
⽅法⼀在两个⽅向同时传递了数组引⽤,⼀般⽤来向调⽤者返回数组引⽤。⽅法⼆和⽅法三从调⽤者向⽅法的实现中传递了数组引⽤。⽅法⼆的参数被声明为⼀维数组,⽽在⽅法三中参数被声明成了-维数组。
(5)数组的⾼级特性
①数组的数组
在O~ect数组中还可以组装不同类型的数组。例如,以下代码中先建⽴两个数组,⼀个是Integer类型,另⼀个是String类型,然后再声明⼀个O~ect类型的数组,把前两个数组分装在其中。
1. Dim I as integer
2. //声明⼀个integer类型的数组
3. Dim grade(15)as integer
4. For i:0 tO 14
5. Grade(i)=i
6. NeXt i
7. //声明⼀个string类型的数组
8. Dim name(15)as String
9. For i=0 tO 14
10. Name(i):”Student”&cstr(i)
11. Next i
12. //声明⼀个新的数组为object,⽤来组装其他数组
13. Dim Student(2)as object
array在vb什么意思啊14. Student(0)=grade
15. Student(1)=name
16. Msgbox(student(0)(2)) //显⽰”2”
17. Msgbox(student(1)(3)) //显⽰”student 3”。
上述代码中使⽤了student(0)和student(1)的后绑定。注意,只有在Option s~ict被关闭时,VB.NET编译器才允许使⽤后绑定。
②数组和集合
虽然集合通常⽤于操作对象,但是它也能操作数据类型。在某些条件下,其效率⽐数组还要⾼。我们可以通过以下4个⽅⾯来进⾏⽐较。
◆集合可以根据需要进⾏扩充,不像数组那样需预先规定⼤⼩。
◆数组只能保存声明时所定义的数据类型,但是同⼀个集合中可以存储不同类型的数据。
◆集合元素的修改较为⿇烦,不像数组那么⽅便。
◆处理集合的速度较数组慢,但是在处理较⼩的动态条⽬集,使⽤集合是最为理想的选择。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论