VB二维数组的反转
我首先定义了一个二维数组 Dim Ary(17, 4) As String ,我循环从MDB中读取数据然后存入到二维数组中,取完后要求把数组变成Ary(4, 17),应该怎么做啊?
[解决办法]
先把二维数组的数据放入一维数组,然后重定义二维数组,再把一维数组的数据放入二维数组。
如
Dim Ary2() As String
Dim Ary1() As String
Redim Ary2(17,4)
...
Redim Ary1((17+1)*(14+1))
k = 0
For i = 0 to 17
For j = 0 to 4
Ary1(k) = Ary2(i,j)
k = k + 1
Next j
Next i
k = 0
Redim Ary2(4,17)
For i = 0 to 4
For j = 0 to 17
Ary2(i,j) = Ary1(k)
k = k + 1
Next j
Next i
[解决办法]
要做出这个程序,其实不难,楼主需要理解数组在内存中的存储方式即可。不管是一维数组还是多维数组,其在内存中都是顺序存储的,即:一维数组是按元素顺序存储,二维是先将第一纬按顺序存储,紧接着就是第二维,多维依次类推。所以转换的时候,所以转换的时候只需要取得数组在内存中的首地址即可,而VarPtr()函数可以读取数组第一个元素的地址,也就是数组首地址。有了首地址在分配元素就不是问题了。
[解决办法]
可以用函数封装一个转换行列取值
function GetNewArray(var Row as integer,var Col as integer) as string
begin
GetNewArray=Ary(col,row)
end;
[解决办法]
个人觉得是不是多余了?
为什么需要转换?
17行4列转成4行17号吗?
如果数据量不是很大建议用
dim Tmp() as Variant,dim str as string
..
str=rs(x)
..
redim tmp(xx)
..
tmp(0)=split(str,"XXXXX")
tmp(1)=split(tmp(0),"yyyyy")
这样很动态,随便要几行列,甚至行列还可以不一致咯~~
[解决办法]
直接使用api,memcopy之类的函数即可。
[解决办法]
楼主看看这个(太多的数据,速度会慢的):
'用于下标为0开始的二维数组转换
Private Sub ExchangeArr2D(arrSour() As String, arrNew() As String)
Dim i&, j&
Dim m&, n&, p&
m = UBound(arrSour, 1)
n = UBound(arrSour, 2)
ReDim arrNew(n, m)
For i = 0 To m
For j = 0 To n
arrNew(j, i) = arrSour(i, j)
Next
Next
End Sub
'应用示例
Private Sub Test()
Dim arrTemp() As String
Dim Ary(17, 4) As String
Dim i&, j&
'Ary() 读取数据……
'调用变换过程:
Call ExchangeArr2D(Ary, arrTemp)
' 输出转换结果
For i = 0 To 4
For j = 0 To 17
Debug.Print i, j, arrTemp(i, j)
Next
Next
End Sub