Skip to content

VBMAN.ToolsDic - 字典工具对象

概述

VBMAN.ToolsDic 提供了字典对象的扩展功能,包括深拷贝、合并、URL 编码转换等。

方法

DeepCopy

深拷贝字典对象

vb
Public Function DeepCopy(srcDic As Scripting.Dictionary) As Scripting.Dictionary

参数:

  • srcDic - 源字典

返回: 新的字典对象

说明:

  • 目前仅实现第一层值的拷贝
  • 对象类型使用 Set 赋值

示例:

vb
Dim original As New Scripting.Dictionary
original("key1") = "value1"
original("key2") = 123

' 深拷贝
Dim copy As Scripting.Dictionary
Set copy = VBMAN.ToolsDic.DeepCopy(original)

' 修改副本不影响原字典
copy("key1") = "modified"
Debug.Print original("key1")  ' 输出: value1

OverWrite

合并字典到目标字典

vb
Public Sub OverWrite(DistDic As Scripting.Dictionary, srcDic As Scripting.Dictionary, Optional OnlyKey As Boolean = True)

参数:

  • DistDic - 目标字典
  • srcDic - 源字典
  • OnlyKey - 是否只合并已存在的键(默认 True)

说明:

  • 支持递归合并嵌套字典
  • OnlyKey=True 时只更新目标字典中已存在的键
  • OnlyKey=False 时添加所有源字典的键

示例:

vb
Dim target As New Scripting.Dictionary
target("a") = 1
target("b") = 2

Dim source As New Scripting.Dictionary
source("a") = 100  ' 已存在
source("c") = 300  ' 不存在

' 只合并已存在的键
VBMAN.ToolsDic.OverWrite target, source, True
Debug.Print target("a")  ' 100
Debug.Print target.Exists("c")  ' False

' 合并所有键
VBMAN.ToolsDic.OverWrite target, source, False
Debug.Print target("c")  ' 300

ToWwwFormUrlencoded

生成 www-form-urlencoded 内容

vb
Public Function ToWwwFormUrlencoded(Dic As Scripting.Dictionary) As String

参数:

  • Dic - 字典对象

返回: URL 编码格式字符串

示例:

vb
Dim params As New Scripting.Dictionary
params("name") = "张三"
params("age") = 25

Dim encoded As String
encoded = VBMAN.ToolsDic.ToWwwFormUrlencoded(params)
' 输出: name=张三&age=25

FromWwwFormUrlencoded

解析 www-form-urlencoded 内容

vb
Public Function FromWwwFormUrlencoded(Content As String, Dic As Scripting.Dictionary) As Boolean

参数:

  • Content - URL 编码格式字符串
  • Dic - 接收结果的字典对象

返回: True=成功, False=失败

示例:

vb
Dim params As New Scripting.Dictionary
Dim success As Boolean
success = VBMAN.ToolsDic.FromWwwFormUrlencoded("name=张三&age=25", params)

Debug.Print params("name")  ' 张三
Debug.Print params("age")   ' 25

TowLevelDicAssign

双层节点字典赋值

vb
Public Sub TowLevelDicAssign(Dic As Scripting.Dictionary, Lv1Name As String, Lv2Name As String, Value As Variant)

参数:

  • Dic - 字典对象
  • Lv1Name - 第一层键名
  • Lv2Name - 第二层键名
  • Value - 要赋的值

说明:

  • 如果第一层键不存在,自动创建
  • 方便操作嵌套字典结构

示例:

vb
Dim data As New Scripting.Dictionary

' 赋值双层结构
VBMAN.ToolsDic.TowLevelDicAssign data, "user", "name", "张三"
VBMAN.ToolsDic.TowLevelDicAssign data, "user", "age", 25

Debug.Print data("user")("name")  ' 张三
Debug.Print data("user")("age")   ' 25

综合示例

示例1: 字典合并

vb
Private Sub MergeDictionaries()
    Dim defaults As New Scripting.Dictionary
    defaults("host") = "localhost"
    defaults("port") = 8080
    defaults("timeout") = 30
    
    Dim config As New Scripting.Dictionary
    config("port") = 9090  ' 覆盖默认值
    
    ' 合并配置
    VBMAN.ToolsDic.OverWrite config, defaults, False
    
    Debug.Print config("host")    ' localhost
    Debug.Print config("port")    ' 9090
    Debug.Print config("timeout") ' 30
End Sub

示例2: HTTP 参数处理

vb
Private Sub BuildQueryString()
    Dim params As New Scripting.Dictionary
    params("search") = "vb6"
    params("page") = 1
    params("size") = 20
    
    ' 生成 URL 参数
    Dim query As String
    query = VBMAN.ToolsDic.ToWwwFormUrlencoded(params)
    
    Debug.Print "https://api.example.com/search?" & query
    ' 输出: https://api.example.com/search?search=vb6&page=1&size=20
End Sub

示例3: 配置嵌套结构

vb
Private Sub BuildNestedConfig()
    Dim config As New Scripting.Dictionary
    
    ' 构建嵌套配置
    VBMAN.ToolsDic.TowLevelDicAssign config, "database", "host", "localhost"
    VBMAN.ToolsDic.TowLevelDicAssign config, "database", "port", 3306
    VBMAN.ToolsDic.TowLevelDicAssign config, "cache", "enabled", True
    VBMAN.ToolsDic.TowLevelDicAssign config, "cache", "ttl", 3600
    
    ' 输出 JSON
    Dim json As New cJson
    json("config") = config
    Debug.Print json.Encode
End Sub

最佳实践

  1. 深拷贝注意: 当前版本只深拷贝第一层,嵌套对象仍需注意
  2. 合并策略: 根据需求选择 OnlyKey 参数
  3. URL 编码: 配合 ToolsHttp.UrlEncode 使用处理特殊字符
  4. 嵌套层级: TowLevelDicAssign 只支持两层结构

VB6及其LOGO版权为微软公司所有