怎么样使用VB.net遍历维数未知的多维数组?
怎么样使用VB.net遍历维数未知的多维数组?
当一个数组是多维数组。并且每维的上下标都不定的情况下。我们如何去遍历整个数组呢?我不知道大家都有什么奇招妙法。我昨天亲自写了一个程序,用于遍历一个未知的数组。只知道他是一个数组,并且里面存储的是字符串。程序很简单。就是首先获得 数组的 秩,然后获得每维的长度和上下标,以及总长度。 再放到循环中处理。
本程序默认数组中的数据类型为System.String。当然如果我们想把程序写的更加完美的话。在处理数据的时候,可以通过 GetType()方法获得它的数据类型。然后再做不同的处理即可。
代码如下:
Dima(,,)AsString={{{"NorthSnow","塞北的雪"},{"CSDN","中国最大的开发者网络"}},{{"CRC","长春轨道客车股份有限公司"},{"BEC","剑桥商务英语"}},{{"Net_Lover","孟子E章"},{"China","中华人民共和国"}}}
DimiAsInteger
Dimj,k,l,m,nAsInteger
Dimqq(,)AsInteger
Dimpp()AsInteger
Dimrr(,)AsInteger
ReDimrr(a.Rank-1,1)
l=1'返回数组的总长度,也可以通过Length属性或者LongLength返回
Fori=0Toa.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
ReDimqq(l-1,a.Rank-1)'返回存储
ReDimpp(a.Rank-1)
Fori=0Toa.Rank-1
k=0
k=0
Form=1Torr(i,0)/rr(i,1)
Forj=a.GetLowerBound(i)Toa.GetUpperBound(i)
Forn=1Tol/rr(i,0)
qq(k,i)=j
k=k+1
Next
Next
Next
Next
Dimstr1AsNewSystem.Text.StringBuilder
DimarrTemp()AsInteger
ReDimarrTemp(a.Rank-1)
Fori=0Tol-1
Forj=0Toa.Rank-1
arrTemp(j)=qq(i,j)
Next
str1.Append(a.GetValue(arrTemp))
str1.Append(vbCrLf)
Next
MsgBox(str1.ToString)
DimiAsInteger
Dimj,k,l,m,nAsInteger
Dimqq(,)AsInteger
Dimpp()AsInteger
Dimrr(,)AsInteger
ReDimrr(a.Rank-1,1)
l=1'返回数组的总长度,也可以通过Length属性或者LongLength返回
Fori=0Toa.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
ReDimqq(l-1,a.Rank-1)'返回存储
ReDimpp(a.Rank-1)
Fori=0Toa.Rank-1
k=0
k=0
Form=1Torr(i,0)/rr(i,1)
Forj=a.GetLowerBound(i)Toa.GetUpperBound(i)
Forn=1Tol/rr(i,0)
qq(k,i)=j
k=k+1
Next
Next
Next
Next
Dimstr1AsNewSystem.Text.StringBuilder
DimarrTemp()AsInteger
ReDimarrTemp(a.Rank-1)
Fori=0Tol-1
Forj=0Toa.Rank-1
arrTemp(j)=qq(i,j)
Next
str1.Append(a.GetValue(arrTemp))
str1.Append(vbCrLf)
Next
MsgBox(str1.ToString)