[按键精灵]用“键值对”来存储数据

键值对在按键里面并没有专门的介绍,在别的编程语言里面存储键值对的容器会叫它字典,属于数组的范畴,我们这期文章姑且也叫它字典。
键值对的构成是键名(key)以及索引的对象键值(value),将多个键值对放入到大括号{}中就形成字典,如下所示:
Dim dict={
      "name"  : "小明",       "age"   : 7,       "class" : "一年级" }
注:为了看着方便,这里代码做了分行处理,并不能直接运行,实际使用时这是一行代码或者在分行处用续行符(_)连接。
要访问字典的成员,可以使用键索引,如下所示:
TracePrint dict["name"]
通过索引就可以得到“name”对应键值“小明”。
关于命名是键名key的规则:
可以字符串,如上面的例子,也可以是字符串类型的数字。
Dim dict={"1":"小明"} TracePrint dict["1"]
也可以是变量:
Dim a="name" Dim dict={a:"小明"} TracePrint dict[a]
修改索引对象的值,比如修改小明的年龄(age)为8,那么可以这样写:
dict["age"]=8
在字典中插入新的键值对,如下所示:
dict["like"]="踢球"

删除键值对的操作,目前在按键精灵中并没有看到,暂时空着。。。

创建空的字典有3种方式:

Dim dict() Dim dict=array() Dim dict={null}

后2种方式也是可以清空字典里面的内容。

遍历字典里面的全部键值对:

Dim dict={"name":"小明","age":7,"class":"一年级"} For Each k , v In dict   TracePrint k,v Next

k是key简称对应的是键值,v是value的简称对应的是索引值

重复运行遍历字典的操作,会发现每次运行结果的顺序是不一样的,即下面这3条是随机排序的,也就是说字典的内容是无序数据。

当前脚本第3行:age 7 当前脚本第3行:name 小明 当前脚本第3行:class 一年级

输出字典里面的全部内容,在数组中是可以用join命令合并数组然后输出,如下所示:

Dim arr=array(1,2,3) TracePrint join(arr,",")

输出结果:

当前脚本第2行:1,2,3

但是join命令对字典无效,输出为空值,想要输出字典的全部内容,需要用table转json命令,然后输出。

Dim dict={"name":"小明","age":7,"class":"一年级"} Dim json=encode.TableToJson(dict) TracePrint json

输出结果:

当前脚本第3行:{"age":7,"class":"一年级","name":"小明"}

获取字典有多少个键值对,测试用UBuound或者len命令都不行,那么换一个思维,每一个键值对之间是用逗号分隔的,先转json,当做普通的字符串,用逗号分隔得到新的数组,然后获取数组最大下标,就可以知道键值对的个数了,这个方式虽然绕了点,但是也可以实现。

为了方式键值中含有逗号,也可以用逗号+引号作为分割符,增加精准度。

以上介绍的内容都是一维的字典,实际应用时可能会是多维的字典,如下:

Dim table={"success":200,"data":{"code":"验证码是1646"}} TracePrint table["data"]["code"]

输出结果:

当前脚本第2行:验证码是1646

所谓多维字典就是键值对的索引对象依然是字典。

{  "success": 200,   "data": {     "code": "验证码是1646"   } }

即data的键值是{"code":"验证码是1646"}

关于字典的多维的维数是没有限制的,理论上是可以无穷的。

实际应用的例子:

在游戏中记录账号的数据:

{   "名称": "小A",   "等级": "5",   "经验": 80,   "金币": "5000" }

通过这个字典可以记录账号的数据,当数据发生变化以后也可以修改,如等级由5级变成6级,可以这样写。

Dim 账号={"名称":"小A","等级":"5","经验":80,"金币":"5000"} 账号["等级"] = 账号["等级"] + 1 TracePrint 账号["等级"]

输出结果:

当前脚本第3行:6

新的字典数据就变成了:

{"名称":"小A","等级":6,"经验":80,"金币":"5000"}

字典存储数据适合于多个无序数据的存储,方便调用及修改。

版权声明:
作者:xiaoyang
链接:https://xyzzm.cn/index.php/2022/05/28/%e6%8c%89%e9%94%ae%e7%b2%be%e7%81%b5%e7%94%a8%e9%94%ae%e5%80%bc%e5%af%b9%e6%9d%a5%e5%ad%98%e5%82%a8%e6%95%b0%e6%8d%ae/
来源:个人编程学习
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录