首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB二维数组的反转,该如何处理

2012-12-30 
VB二维数组的反转我首先定义了一个二维数组 Dim Ary(17, 4) As String ,我循环从MDB中读取数据然后存入到

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


[解决办法]
Dim Ary1(17, 4) As String, Ary2(4, 17) As String
Dim i As Long, j As Long

For i = 0 To 17
For j = 0 To 4

  Ary2(j, i) = Ary1(i, j)

Next j
Next i
 
[解决办法]
引用:
Dim Ary1(17, 4) As String, Ary2(4, 17) As String
Dim i As Long, j As Long

For i = 0 To 17
For j = 0 To 4

  Ary2(j, i) = Ary1(i, j)

Next j
Next i
顶一个,弄别的弄那么麻烦干吗

热点排行