您的位置:首页 > 其它

数组行列转置神器Transpose被玩坏了

2018-02-25 23:59 337 查看
        几天前的博文和大家分享了“Transpose实现数组行列转置的限制”。今天来看数组行列转置神器Transpose另一个奇特的用法。
        以二维数组为例,一般情况下代码中引用二维数组的元素使用如a(x,y)的形式,可以称为普通二维数组,下图左侧为一个3x2的数组,共有6个元素。
        其实,数组也可以有其他的形式,暂且称为嵌套二维数组(不确定是否有更专业的的名字)。其中a(x)是一个一维数组,包含a(1),a(2),a(3)三个元素;每个数组元素存储的内容,不再是一个数字或者字符串,而是另外一个一维数组,例如:a(1)中存储了包含两个元素的一维数组(1和4),其引用方式为a(x)(y)。
        


        接下来就来在代码中构建一个嵌套二维数组array_B,首先声明array_B(1 To 3)为包含3个元素的一维数组,其中保存的数据是另一个包含两个元素的一维数组array_A。
Sub Transpose4Fun()
Dim array_A(1 To 2), array_B(1 To 3), array_C, array_D, x
For x = 1 To 3
array_A(1) = x
array_A(2) = x
4000
+ 3
array_B(x) = array_A
Next x
array_C = Application.Transpose(array_B)
array_D = Application.Transpose(array_C)
Stop
End Sub        嵌套二维数组array_B转置的结果保存在数组array_C中,然后将数组array_C再次转置的结果保存中数组array_D,看起来有些乱呦!细心的同学可能有疑问了 ——两次转置: 转置(转置(二维数组)),最终结果回到出发点,array_D和array_B是一模一样的吗?不解释,先上图。


        只能说现实和理想是有差距的,VBA处理数组的过程和大家想象的并不相同,这也就是本文要告诉大家的——数组行列转置神器Transpose被玩坏了。

        一起来看看VBA本地窗口中的数据,不难看出array_B就是前文中讲的嵌套二维数组;接下来对array_B进行转置得到数组array_C,数组元素的值确实完成了行列转置,但是这个数组变成了一个2x3的普通二维数组;最后对于array_C又进行了一次转置得到数组array_D,众所周知负负得正,但是array_D仍然是普通二维数组,并没有变回嵌套二维数组,也就是和array_B存储方式是不一样的。
        为什么会这样呢,本博主也不得而知,呵呵!          
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: