zoukankan      html  css  js  c++  java
  • 字典的应用

    我们知道字典对象由关键字 Key 和数据项 Item 构成。通常情况下 Key 是字符串,实际上也可以是其它数据类型,比如整数、小数等。而数据项则可以是任何数据类型,包括字典对象本身。这样我们就可以创建多层的字典对象了。利用多层字典对象,我们可以实现诸如级联菜单、联动数据有效性序列、联动下拉框等等应用

    例子

     1 Option Explicit
     2 Public Const PR_SALARY_GROUP = "班组"
     3 Public Const PR_SALARY_POSITION = "工位"
     4 Public Const PR_SALARY_NAME = "姓名"
     5 Public Const PR_SALARY_BASE = "基本工资"
     6 Public Const PR_SALARY_BONUS = "绩效奖金"
     7 
     8 Sub Main()
     9     Dim Ar
    10     Debug.Print ParseData("")("焊接")("B")("基本工资")
    11 End Sub
    12 
    13 Public Function ParseData()
    14     Dim DTitle, Arr, I&, Dic, DTemp
    15     Arr = Sheet1.[a1].CurrentRegion
    16     Set DTitle = CreateObject("Scripting.Dictionary")
    17     '======列字段字典=======
    18     For I = 1 To UBound(Arr, 2)
    19         DTitle(Arr(1, I)) = I
    20     Next
    21     
    22     Set Dic = CreateObject("Scripting.Dictionary")
    23     For I = 2 To UBound(Arr)
    24         '依据(班组)创建字典
    25         If Not Dic.Exists(Arr(I, DTitle(PR_SALARY_GROUP))) Then _
    26             Set Dic(Arr(I, DTitle(PR_SALARY_GROUP))) = _
    27             CreateObject("Scripting.Dictionary")
    28             
    29         Set DTemp = Dic(Arr(I, DTitle(PR_SALARY_GROUP)))
    30         '依据(班组)(工位)创建字典
    31         If Not DTemp.Exists(Arr(I, DTitle(PR_SALARY_POSITION))) Then _
    32             Set DTemp(Arr(I, DTitle(PR_SALARY_POSITION))) = _
    33             CreateObject("Scripting.Dictionary")
    34             
    35         Set DTemp = DTemp(Arr(I, DTitle(PR_SALARY_POSITION)))
    36         '依据(班组)(工位)(姓名)创建字典
    37         If Not DTemp.Exists(Arr(I, DTitle(PR_SALARY_NAME))) Then _
    38             Set DTemp(Arr(I, DTitle(PR_SALARY_NAME))) = _
    39             CreateObject("Scripting.Dictionary")
    40             
    41         Set DTemp = DTemp(Arr(I, DTitle(PR_SALARY_NAME)))
    42         '字典(班组)(工位)(姓名) & (基本工资) =Arr(I, DTitle(PR_SALARY_BASE))
    43         DTemp(PR_SALARY_BASE) = Arr(I, DTitle(PR_SALARY_BASE))
    44         '字典(班组)(工位)(姓名) & (绩效奖金) =Arr(I, DTitle(PR_SALARY_BONUS))
    45         DTemp(PR_SALARY_BONUS) = Arr(I, DTitle(PR_SALARY_BONUS))
    46     Next
    47     'dic(班组)(工位)(姓名) &(基本工资|绩效奖金)=基本工资|绩效奖金
    48     Set ParseData = Dic
    49     Set DTitle = Nothing
    50     Set DTemp = Nothing
    51     Set Dic = Nothing
    52 End Function

    dicSalary字典树型结构

        ├─甲班

        │   ├─拼装

        │   │   ├─张三

        │   │   │   ├─基本工资 -> $1000

        │   │   │   │

        │   │   │   └─绩效奖金 -> $800

        │   │   │

        │   │   └─李四

        │   │        ├─基本工资 -> $1000

        │   │        │

        │   │        └─绩效奖金 -> $800

        │   │

        │   └─焊接

        │        ├─王二麻子

        │        │   ├─基本工资 -> $1100  

        │        │   │

        │        │   └─绩效奖金 -> $900

        │        │

        │        └─赵大

        │             ├─基本工资 -> $1100

        │             │

        │             └─绩效奖金 -> $900

        │

        └─乙班

             ├─拼装

             │   ├─诸葛

             │   │   ├─基本工资 -> $1000

             │   │   │

             │   │   └─绩效奖金 -> $800

             │   │

             │   └─南宫

             │        ├─基本工资 -> $1000

             │        │

             │        └─绩效奖金 -> $800

             │

             └─焊接

                  ├─西门

                  │   ├─基本工资 -> $1100

                  │   │

                  │   └─绩效奖金 -> $900

                  │

                  └─轩辕

                       ├─基本工资 -> $1100

                       │

                       └─绩效奖金 -> $900

  • 相关阅读:
    Centos6.8部署jumpserver(完整版)
    Linux系统下inode满了导致无法写文件的解决思路
    MySQL5.7.20报错Access denied for user 'root'@'localhost' (using password: NO)
    深浅拷贝
    集合
    列表 元组 range
    机器码和字节码
    函数
    文件操作
    小数据池和代码块
  • 原文地址:https://www.cnblogs.com/Ionefox/p/10261309.html
Copyright © 2011-2022 走看看