Dictionary 类
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 方法用来将字典中的所有元素全部消除。