当前位置: 首页 > 文档资料 > TJS2 参考手册 >

Dictionary 类

优质
小牛编辑
120浏览
2023-12-01

 Dictionary 类是用来处理字典的类。

 字典,或者称为关联数组,是指保存着若干个名字和其唯一对应的值组成的“pair”的对象。
 字典和数组一样使用 [ ] (间接成员选择) 运算符来操作,不同的是把下标索引换成字符串,也就是名字(键)。名字可以作为标识符,用 . (直接成员选择) 运算符来对字典中的元素进行操作。
 还有,选择了不存在的元素的话,会返回 void 。
 使用 delete 运算符可以删除字典中的元素。

例:
vard=newDictionary();
d["sat"]=1;//和d.sat=1相同
d["sun"]=2;//和d.sun=2相同
d["mon"]=3;//和d.mon=3相同
d["name"]="value!";//和d.name="value!"相同
d["continue"]=4;//虽然continue不是有效的标识符,但是这样写没问题
d.continue=4;//因为continue不是有效的标识符,这样写是错误的

varsat=d["sat"];//1被代入到变量sat中
varnone=d["none"];//void被代入到变量none中

deleted.sat;//sat被删除
deleted["continue"];//continue被删除

表达式声明字典

 使用%[ ] ,可以在表达式中现场记述 Dictionary 类型的对象。以“元素名 => 元素的值”的形式,用逗号分隔,组成初始元素的表达式列举出来。例如,如果执行
var dic = %["a" => 1, "b" => 2, "c" => 3];
 这样一个表达式,则变量 dic 将指向一个包含一个个的像 "a":1"b":2"c":3 这样的由名字和值成对组成的元素的 Dictionary 类型的对象。
 在内部,=> 和逗号的作用是完全一样的,=> 是为了便于阅读而设计的书写方式 ( 和 perl 一样 )。

对 Dictionary 类的方法的调用

 Dictionary 类型的对象在创建之后是任何一个成员都不包含的。(译者注:连方法都没有注册进去。我估计是因为 Dictionary 类型的对象中的所有元素都会被当作字典中的元素来处理。)
 例如,想要调用 assign 方法而对 Dictionary 类型的对象 dict 使用像 dict.assign(src) 的语法来操作的话,因为 dict 中不具备 assign 方法,这会产生错误。
 所以,应该使用 incontextof 运算符,把 Dictionary 类型的对象作为上下文,以直属于 Dictionary 类的方法对其进行操作。

例:
vara=%[];
varb=%[];
(Dictionary.assignincontextofa)(b);//由b复制到a
(Dictionary.clearincontextofb)();//清除b的内容

saveStruct

 saveStruct 用来将结构化的数据输出到指定文件。
 请参照 Array 类 中的相同方法。

assign

 assign 方法用于字典的复制。

構文:assign(<被复制的源字典>,<是否消除字典中原有的元素=true>)


 将作为参数指定的其他字典的内容全部复制进来。
 “是否消除字典中原有的元素”为假的时候,目的对象 (调用该方法的对象) 的内容并不会被清空,而是将源字典的内容覆盖进去。与原字典中名字相同的元素会被覆盖掉。

 将数组 (Array类型的对象) 指定为被复制对象的时候,数组中的对象会依次以 “名字、值、名字、值……” 的顺序结成对,然后复制到字典中。(译者注:数组中充当名字的元素应该是字符串,否则会产生错误)

assignStruct

 assignStruct 方法同样用于字典的复制。

構文:assignStruct(<被复制的源字典>)


 将作为参数指定的其他字典的内容全部复制进来。
 和 assign 方法不同,源字典的元素中的值是数组或字典的时候,会进行递归复制 ( assign 方法的话,只会复制元素中数组或字典的引用 )。

clear

 clear 方法用来将字典中的所有元素全部消除。