1. 基本字典结构与dict get命令:
字典是类似于有偶数个元素的列表的一种结构,其中第一、三、五(等等)个元素(关键字)都互不相同。字典中可以有
任意多个元素,但是每个值的关键字都必须是独一无二的。如:
firstname Phoenix surname Law title Mr
dict get命令获取两个参数,一个字典和一个要在字典中查找的关键字,然后返回这个关键字的关联值;如果该关键字没有与它
有关联的值,则会发生错误。
% set example {firstname Phoenix surname Law title Mr}
% dict get $example surname
> Law
对于比较复杂的字典,可以使用换行把各个关键字-关联值对分隔开。
% set prefres {
%Joe{the easy life}
%Jeremy{fast cars}
%{Uncle Sam} {motherhood and apple pie}
% }
% dict get $prefers {Uncle Sam}
> motherhood and apple pie
字典和列表可以嵌套:
% set prefers {
%001 {
% firstname Joe
% surname Schmoe
% title Mr
%}
%002 {
% firstname Ann
% initial E
% surname Huan
% title Miss
% }
% }
% puts [dict get [dict get $prefers 002] firstname]
% Ann
2. 创建和更新字典:
dict create命令与list相似,它获取任意多个关键字-关联值对,然后生成一个包含这些关键字-关联值对的字典。当一个关键字
多次出现时,采用最后也它关联的值。
% dict create a b c {d e} {f g} h a "x repeated"
> a {x repeated} c {d e} {f g} h
使用dict replace可以用来添加关键字。
% set example [dict create firstname Ann initial E surname Huan]
% dict replace $example initial Y
> firstname Ann initial Y surname Huan
% dict replace $example title Mrs surname Boddie
> firstname Ann initial Y surname Boddie title Mrs
如果希望删除一个字典中的某个关键字,使用dict remove命令。注意,删除一个不存在的关键字并不会导致错误。
% dict remove $example initial
> firstname Ann surname Huan
% dict remove $example firstname title
> initial E surname Huan
dict merge命令通过融合两个或更多字典,创建一个新字典,源字典分别作为独立的参数提供。当两个或多个字典有同样的关键字时,生成的字典会把这个关键字映射到命令中最后出现该关键的字典中的关联值。
% set colors1 {foreground white background black}
% set colors2 {highlight red foreground green}
% dict merge $colors1 $colors2
> foreground green background black highlight red
当有一个作为变量的字典时,可以通过添加关键字,改变关键字的映射或删除关键字来更新它。前两个操作由dict set命令完成
,第三个操作由dict unset命令完成。
% set example [dict create firstname Ann initial E surname Huan title Miss]
% dict set example title Mrs
> firstname Ann initial E surname Huan title Mrs
% dict get example title
> Mrs
% dict unset example initial
> firstname Ann surname Huan title Mrs
3. 检测字典:子命令size、exists、keys和for
dict size命令可以确定字典元素的个数。
% dict size {firstname Ann surname Huan title Miss}
> 3
dict exists子命令可以检查字典中是否存在指定的关键词。如果返回1,则dict get命令可成功地从这个字典中取得该关键字的值。如果返回0,则dict get命令会失败。
dict keys可以获得字典中所有关键字的列表(按顺序)。还可以根据关键字与指定模式的string match匹配情况进行筛选。
% dict keys $example {*name}
> firstname surname
dict values可以将字典中的关联值按顺序组成列表。该命令也可以进行模式筛选。
dict for可以遍历字典的关键字和关联值,并分别对它们执行一些代码。它获取一对变量的列表作为一个参数(一个是关键字,一个是与关键字相关联的值),并获取一个字典以及构成循环块的
Tcl脚本。该命令的返回值是空字符串。与foreach类似,也可以使用break和continue来停止循环或跳到字典中的下一个关键字-关联值对。
4. 更新字典中的值:
更新,不是用新值替换。
dict append命令在字典的值中添加一个字符串或一些字符串。
% set example {firstname Ann surname Huan title Miss}
% dict append example firstname ie
> firstname Annie surname Huan title Miss
类似地,当想要在字典中创建列表时,可以使用dict lappend子命令。
% set shopping {fruit apple veg carrot}
% dict lappend shopping fruit orange
> fruit {apple orange} veg carrot
dict incr获取一个包含字典的变量,一个将要对其关联值进行增加操作的关键字,以及一个可选的值,用来设置增加量。命令的结果是更新后的字典,也会写回原字典变量中。与普通的incr命令相似,指定的关键字不必事先存在,如果不存在,就视为事先存在值为0的该关键字项。
dict update命令获取一个字典的变量,字典中的关键字的一个列表,及与关键字关联的变量,以及由Tcl脚本描述的、要对这些变量进行的更新操作。这个脚本的结果也是整个dict update命令的结果。执行完脚本后,变量会被写回原来的字典变量中,从而允许对字典进行复杂的更新。
5. 使用嵌套字典:
dict get、dict exists、dict set、dict unset以及dict with等允许在命令中指定多个关键字,为命令指明在嵌套字典中进行操作的位置。