VB中如何声明及使用多维数组,多层数组及动态数组

声明固定大小的数组  
  有三种方法声明固定大小的数组,用哪一种方法取决于数组应有的有效范围:    

  建立公用数组,在模块的声明段用   Public   语句声明数组。  
  建立模块级数组,在模块的声明段用   Private   语句声明数组。  
  建立局部数组,在过程中用   Private   语句声明数组。    
  设定上下界  
  声明数组时,在数组名之后跟一个用括号括起来的上界。上界不得超过   Long   数据类型的范围(-2,147,483,648   到   2,147,483,647)。例如,下列数组声明可出现在模块的声明段:  
   
  Dim   Counters   (14)   As   Integer                   '15   个元素。  
  Dim   Sums   (20)   As   Double                         '21   个元素。  
   
  为建立公用数组,直接用   Public   取代   Dim。  
   
  Public   Counters   (14)   As   Integer  
  Public   Sums   (20)   As   Double  
   
  在过程之中同样的声明使用   Dim:  
   
  Dim   Counters   (14)   As   Integer  
  Dim   Sums   (20)   As   Double  
   
  第一个声明建立了一个有   15   个元素的数组,其索引号从   0   到   14   。第二个声明建立了一个有   21   个元素的数组,其索引号从   0   到   20   。缺省的下界为   0。  
   
  为了规定下界,用关键字   To   显式提供下界(为   Long   数据类型):  
   
  Dim   Counters   (1   To   15)   As   Integer  
  Dim   Sums   (100   To   120)   As   String  
   
  在前述声明中,Counters   的索引值范围从   1   到   15,而   Sums   的索引值范围从   100   到   200。  
   
  包含其它数组的数组  
  有可能建立   Variant   数据类型数组,并与不同数据类型的数组共居一处。以下代码建立两个数组,一个包含整数,而另一个包含   字符串。然后声明第三个   Variant   数组,并将整数和字符串数组放置其中:  
   
  Private   Sub   Command1_Click   ()  
        Dim   intX   As   Integer       '声明计数器变量。  
        '声明并放置整数数组。  
        Dim   countersA   (5)   As   Integer  
              For   intX   =   0   To   4  
                    countersA   (intX)   =   5  
              Next   intX  
        '声明并放置字符串数组。  
              Dim   countersB   (5)   As   String  
                    For   intX   =   0   To   4  
                          countersB   (intX)   =   "hello"  
                    Next   intX  
        Dim   arrX   (2)   As   Variant                   '声明拥有两个成员的新数组。  
              arrX   (1)   =   countersA   ()             '将其它数组移居到数组。  
              arrX   (2)   =   countersB   ()  
              MsgBox   arrX   (1)   (2)                   '显示每一个数组的成员。  
              MsgBox   arrX   (2)   (3)  
  End   Sub

 
  多维数组  
  有时需要追踪记录数组中的相关信息。例如,为了追踪记录计算机屏幕上的每一个像素,需要引用它的   X、Y   坐标。这时应该用多维数组存储值。  
   
  可用   Visual   Basic   声明多维数组。例如,下面的语句声明了一个过程内的   10   ×   10   的二维数组。  
   
  Static   MatrixA   (9,   9)   As   Double  
   
  可用显式下界来声明两个维数或两个维数中的任何一个:  
   
  Static   MatrixA   (1   To   10,   1   To   10)   As   Double  
   
  可以将所有这些推广到二维以上的数组。例如:  
   
  Dim   MultiD   (3,   1   To   10,   1   To   15)  
   
  这个声明建立了三维数组,大小为   4   ×   10   ×   15。元素总数为三个维数的乘积,为   600。  
   
  注意   在增加数组的维数时,数组所占的存储空间会大幅度增加,所以要慎用多维数组。使用   Variant   数组时更要格外小心,因为他们需要更大的存储空间。    
  用循环操作数组  
  可以用   For   循环嵌套有效的处理多维数组。例如,在   MatrixA   中基于每个元素在数组中的位置为其赋值:  
   
  Dim   I   As   Integer,   J   As   Integer  
  Static   MatrixA(1   To   10,   1   To   10)   As   Double  
  For   I   =   1   To   10  
        For   J   =   1   To   10  
              MatrixA   (I,   J)   =   I   *   10   +   J  
        Next   J  
  Next   I  
   
   
  要创建动态数组,请按照以下步骤执行:    
   
  (如果希望数组为公用数组,则)用   Public   语句声明数组,或者,(如果希望数组为模块级,则)在模块级用   Dim   语句声明数组,或者(如果希望数组为局部数组,则)在过程中用   Static   或   Dim   语句声明数组。给数组附以一个空维数表,这样就将数组声明为动态数组。    
  Dim   DynArray   ()  
   
  用   ReDim   语句分配实际的元素个数。    
  ReDim   DynArray   (X   +   1)  
   
  ReDim   语句只能出现在过程中。与   Dim   语句、Static   语句不同,ReDim   语句是一个可执行语句,由于这一语句,应用程序在运行时执行一个操作。  
   
  ReDim   语句支持这样的语法,它与固定数组中使用的语法相同。对于每一维数,每个   ReDim   语句都能改变元素数目以及上下界。但是,数组的维数不能改变。  
   
  ReDim   DynArray   (4   to   12)  
   
  例如,用第一次声明在模块级所建立的动态数组   Matrix1:  
   
  Dim   Matrix1   ()   As   Integer  
   
  然后,在过程中给数组分配空间:  
   
  Sub   CalcValuesNow   ()  
        .  
        .  
        .  
        ReDim   Matrix1   (19,   29)  
  End   Sub  
   
  这里的   ReDim   语句给   Matrix   分配一个   20   ×   30   的整数矩阵(元素总大小为   600)。还有一个办法,用变量设置动态数组的边界:  
   
  ReDim   Matrix1   (X,   Y)  
   
  注意   您可以将字符串赋值给大小可变的字节数组。一个字节数组也可以被赋值给一个可变长的字符串。一定要注意字符串中的字节数会随平台而变化。同一个字符串在   Unicode   平台上的字节数是它在非   Unicode   平台上的两倍。  
   
  保留动态数组的内容  
  每次执行   ReDim   语句时,当前存储在数组中的值都会全部丢失。Visual   Basi   重新将数组元素的值置为   Empty(对   Variant   数组)、置为   0(对   Numeric   数组)、置为   零长度字符串(对   String   数组)或者置为   Nothing(对于对象的数组)。  
   
  在为新数据准备数组,或者要缩减数组大小以节省内存时,这样做是非常有用的。有时希望改变数组大小又不丢失数组中的数据。使用具有   Preserve   关键字的   ReDim   语句就可做到这点。例如,使用   UBound   函数引用上界,使数组扩大、增加一个元素,而现有元素的值并未丢失:  
   
  ReDim   Preserve   DynArray   (UBound   (DynArray)   +   1)  
   
  在用   Preserve   关键字时,只能改变多维数组中最后一维的上界;如果改变了其它维或最后一维的下界,那么运行时就会出错。 所以可这样编程:  
   
  ReDim   Preserve   Matrix   (10,   UBound   (Matrix,   2)   +   1)  
   
  而不可这样编程:  
   
  ReDim   Preserve   Matrix   (UBound   (Matrix,   1)   +   1,   10)  
    '

posted @ 2009-09-23 23:41  dzqabc  阅读(13970)  评论(0编辑  收藏  举报