字典-数组:当键值 为 数组 时, 输出字典--通过三维坐标系理解

2022.01.07 更新

 '字典由两个一维数组组成, 一个数组是键 数组名.keys,另一个是值 数组名.items, 都是 1行 [数组名.count]列的 数组, 因此[a1].resize(1,dic.count) = dic.items 输出为行

'所以想要以列的形式输出,需要用transpose转置,且相应的resize( dic.count , 1) 

  '当键值 为数组时, 数组名(键名) = array(a,b,c,d,e), 键值数组为 嵌套数组(m行)(n列)而不是二维数组, 需要通过转化成二维数组再输出

_______________________________________________________________

以下为原始笔记,不一定正确

字典-数组:当键值 为 数组 时, 输出字典--通过三维坐标系理解_第1张图片

 Sub test()
Dim ary1
ReDim ary1(1 To 4, 1 To 3)
    With Sheets("RL")
        '表格输入到数组1
        ary1 = .Range("O2:Q5")
        Set d1 = CreateObject("scripting.dictionary")
        For i = 1 To UBound(ary1)
            '字典筛除重复键
            If Not d1.exists(ary1(i, 1)) Then
            d1(ary1(i, 1)) = Array(ary1(i, 1), Left(ary1(i, 2), 2), ary1(i, 3))
            End If
        Next i
        Dim ary2
        '必要,否则报错
        it = d1.items
        ReDim ary2(0 To d1.Count - 1, 0 To 2)
        '键值数组输出到数组2
        For m = 0 To d1.Count - 1
            For n = 0 To 2
                ary2(m, n) = it(m)(n)
            Next n
        Next m
        '数组2输出到表格
        .[F5].Resize(m, n) = ary2
    End With
End Sub

 理解:

        'array(a,b,c)是一维数组,所以每个特定的键的值都是一个一维数组

        d1(ary1(i, 1)) = Array(ary1(i, 1), Left(ary1(i, 2), 2), ary1(i, 3))

        '后面的 it 不能直接用d1.items 代替,会报错

字典-数组:当键值 为 数组 时, 输出字典--通过三维坐标系理解_第2张图片

    'it(0) = d1.(ary1(1,1)) = Array(ary1(i, 1), Left(ary1(i, 2), 2), ary1(i, 3)) 是一维 行数组

字典-数组:当键值 为 数组 时, 输出字典--通过三维坐标系理解_第3张图片

    'it / keys / items 本身是一个 一维的 行数组!!! 所以直接输出需要 转置成 一维的 列数组!再输出

    '例如[e1].Resize(dic.Count, 1) = Application.Transpose(dic.Keys) 

    '所以当 键值 为一维行数组 中嵌套 一维行数组 时, 不能简单地 resize(行数,列数) = items'

    '如果理解为x-y-z三维坐标系的话,前者[excel]是二维(相当于x-y平面), 而后者是伪装成一维的二维(相当于x-z平面),y方向会溢出

'(因为我习惯excel所在的x-y平面,所以哪怕被强调键值是一维数组[即x轴],但是就是认定它是二维的[确实是二维的,不过是x-z平面的],所以总是将它误认为x-y平面,强行往excel的x-y平面里面塞)

'[我悟了,我已经超越三维生物了hhhhh]'

    For m = 0 To d1.Count - 1

        For n = 0 To 2

        'ary2 将 it 这个 一维 列数组 转为 二维数组

        '相当于 从x-z平面,转为x-y平面

            ary2(m, n) = it(m)(n)

        Next n

    Next m

你可能感兴趣的:(vba)