当一个数组是多维数组。并且每维的上下标都不定的情况下。我们如何去遍历整个数组呢?我不知道大家都有什么奇招妙法。我昨天亲自写了一个程序,用于遍历一个未知的数组。只知道他是一个数组,并且里面存储的是字符串。程序很简单。就是首先获得 数组的 秩,然后获得每维的长度和上下标,以及总长度。 再放到循环中处理。

本程序默认数组中的数据类型为System.String。当然如果我们想把程序写的更加完美的话。在处理数据的时候,可以通过 GetType()方法获得它的数据类型。然后再做不同的处理即可。

代码如下:

Dim 
   a(,,)  
  As 
    
  String 
    
  = 
   {{{ 
  " 
  NorthSnow 
  " 
  ,  
  " 
  塞北的雪 
  " 
  }, { 
  " " 
  ,  
  " 
  中国最大的开发者网络 
  " 
  }}, {{ 
  " 
  CRC 
  " 
  ,  
  " 
  长春轨道客车股份有限公司 
  " 
  }, { 
  " 
  BEC 
  " 
  ,  
  " 
  剑桥商务英语 
  " 
  }}, {{ 
  " 
  Net_Lover 
  " 
  ,  
  " 
  孟子E章 
  " 
  }, { 
  " 
  China 
  " 
  ,  
  " 
  中华人民共和国 
  " 
  }}}
         
  Dim 
   i  
  As 
    
  Integer 
  
         
  Dim 
   j, k, l, m, n  
  As 
    
  Integer 
  
         
  Dim 
   qq(,)  
  As 
    
  Integer 
  
         
  Dim 
   pp()  
  As 
    
  Integer 
  
         
  Dim 
   rr(,)  
  As 
    
  Integer 
  
         
  ReDim 
   rr(a.Rank  
  - 
    
  1 
  ,  
  1 
  )
        l  
  = 
    
  1 
     
  ' 
  返回数组的总长度, 也可以通过 Length 属性 或者 LongLength  返回 
  
 
           
  For 
   i  
  = 
    
  0 
    
  To 
   a.Rank  
  - 
    
  1 
  
            l  
  = 
   l  
  * 
   (a.GetUpperBound(i)  
  - 
   a.GetLowerBound( 
  0 
  )  
  + 
    
  1 
  )
            rr(i,  
  0 
  )  
  = 
   l
            rr(i,  
  1 
  )  
  = 
   a.GetUpperBound(i)  
  - 
   a.GetLowerBound( 
  0 
  )  
  + 
    
  1 
  
         
  Next 
  

         
  ReDim 
   qq(l  
  - 
    
  1 
  , a.Rank  
  - 
    
  1 
  )    
  ' 
  返回存储 
  
 
           
  ReDim 
   pp(a.Rank  
  - 
    
  1 
  )
         
  For 
   i  
  = 
    
  0 
    
  To 
   a.Rank  
  - 
    
  1 
  
            k  
  = 
    
  0 
  
            k  
  = 
    
  0 
  
             
  For 
   m  
  = 
    
  1 
    
  To 
   rr(i,  
  0 
  )  
  / 
   rr(i,  
  1 
  )
                 
  For 
   j  
  = 
   a.GetLowerBound(i)  
  To 
   a.GetUpperBound(i)
                     
  For 
   n  
  = 
    
  1 
    
  To 
   l  
  / 
   rr(i,  
  0 
  )
                        qq(k, i)  
  = 
   j
                        k  
  = 
   k  
  + 
    
  1 
  
                     
  Next 
  
                 
  Next 
  
             
  Next 
  
         
  Next 
  
         
  Dim 
   str1  
  As 
    
  New 
   System.Text.StringBuilder
         
  Dim 
   arrTemp()  
  As 
    
  Integer 
  
         
  ReDim 
   arrTemp(a.Rank  
  - 
    
  1 
  )
         
  For 
   i  
  = 
    
  0 
    
  To 
   l  
  - 
    
  1 
  
             
  For 
   j  
  = 
    
  0 
    
  To 
   a.Rank  
  - 
    
  1 
  
                arrTemp(j)  
  = 
   qq(i, j)
             
  Next 
  
            str1.Append(a.GetValue(arrTemp))
            str1.Append(vbCrLf)
         
  Next 
  
         
  MsgBox 
  (str1.ToString)