热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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()两个函数来返回数组的上、下界。中国自学编程网整理公布 ,www.zxbc.cn对于一维数组而言,仅仅须要一个參数,那便是数组名。比如:

  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语句中包括Preservekeyword就能够,典型语句为:

  1. ReDa_m PresetVe Types(10,23) 

对于多维数组,在使用Preservekeyword时,仅仅能改动最后一维的大小。假设改变其它维,那么将出现执行错误。假设不清楚某维的当前大小,能够使用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  
  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个方面来进行比較。

◆集合能够依据须要进行扩充,不像数组那样需预先规定大小。

◆数组仅仅能保存声明时所定义的数据类型,可是同一个集合中能够存储不同类型的数据。

◆集合元素的改动较为麻烦,不像数组那么方便。

◆处理集合的速度较数组慢,可是在处理较小的动态条目集,使用集合是最为理想的选择。


推荐阅读
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 深入解析:Synchronized 关键字在 Java 中对 int 和 Integer 对象的作用与影响
    深入探讨了 `Synchronized` 关键字在 Java 中对 `int` 和 `Integer` 对象的影响。尽管初看此题似乎简单,但其实质在于理解对象的概念。根据《Java编程思想》第二章的观点,一切皆为对象。本文详细分析了 `Synchronized` 关键字在不同数据类型上的作用机制,特别是对基本数据类型 `int` 和包装类 `Integer` 的区别处理,帮助读者深入理解 Java 中的同步机制及其在多线程环境中的应用。 ... [详细]
  • 本文详细解析了Java类加载系统的父子委托机制。在Java程序中,.java源代码文件编译后会生成对应的.class字节码文件,这些字节码文件需要通过类加载器(ClassLoader)进行加载。ClassLoader采用双亲委派模型,确保类的加载过程既高效又安全,避免了类的重复加载和潜在的安全风险。该机制在Java虚拟机中扮演着至关重要的角色,确保了类加载的一致性和可靠性。 ... [详细]
  • 在C#编程中,数值结果的格式化展示是提高代码可读性和用户体验的重要手段。本文探讨了多种格式化方法和技巧,如使用格式说明符、自定义格式字符串等,以实现对数值结果的精确控制。通过实例演示,展示了如何灵活运用这些技术来满足不同的展示需求。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 本文主要探讨了Java中处理ActionEvent事件的接口,以及一些常见的编程问题和解决方案,包括方法重载、成员变量访问、镜片质量检测等。 ... [详细]
  • com.hazelcast.config.MapConfig.isStatisticsEnabled()方法的使用及代码示例 ... [详细]
  • 思科IOS XE与ISE集成实现TACACS认证配置
    本文详细介绍了如何在思科IOS XE设备上配置TACACS认证,并通过ISE(Identity Services Engine)进行用户管理和授权。配置包括网络拓扑、设备设置和ISE端的具体步骤。 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 2.2 组件间父子通信机制详解
    2.2 组件间父子通信机制详解 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 本文深入解析了JDK 8中HashMap的源代码,重点探讨了put方法的工作机制及其内部参数的设定原理。HashMap允许键和值为null,但键为null的情况只能出现一次,因为null键在内部通过索引0进行存储。文章详细分析了capacity(容量)、size(大小)、loadFactor(加载因子)以及红黑树转换阈值的设定原则,帮助读者更好地理解HashMap的高效实现和性能优化策略。 ... [详细]
author-avatar
diudiu不是狗
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有