TCL中的字典检测命令
1、确定字典元素的个数
这可以通过dict size命令完成,格式如下:
dict size dictionaryValue
例如:
dict size {firstname Ann surname Huan titleMiss}
→3
dict size {}
→0
2、检查字典中是否存在指定的关键词
这可以用dict exists命令完成,格式如下:
dict exists dictionaryValue key ?key ...?
如果它返回1,则dict get命令可成功地从这个字典中取得该关键词对应的值,如果返回0,则 dict get命令会失败,因为字典中没有那个关键字。例如:
set example {title Miss firstname Annsurname Huan}
dict exists $example firstname
→1
dict exists $example initial
→0
3、获得字典中所有关键字(关联值)的列表(按顺序)
这可以使用dict keys命令,格式如下:
dict keys dictionaryValue ?globPattern?
这个命令将字典的关键字组成列表,还可以通过globPattern参数,根据关键字与指定模式的 string match匹配情况进行筛选。继续上面那个示例:
dict keys $example
→title firstnamesurname
dict keys $example {*name}
→firstname surname
类似地,字典中的关联值也可以按顺序组成列表,即dict values命令,该命令也可以进行模式筛选。例如:
dict values $example
→Miss Ann Huan
dict values $example *n*
→Ann Huan
4、遍历字典的关键字和关联值,分别对它们执行一些代码
这可以使用 dict for命令,格式为:
dict for {keyVar valueVar} dictionaryValuebody
它获取一对变量的列表作为一个参数(一个是关键字,一个是与关键字相关联的值)。并获取一个字典以及构成循环块的Tcl脚本。该命令的返回值是空字符串。与 foreach相似,也可以使用break和continue来停止循环或跳到字典中的下一个关键字关联值对。例如,整齐地打印输出一个字典的内容。
dict for {key value} $dict {
puts [format "%s: %s" $key $value]
}
→
title: Miss
firstname: Ann
surname:Huan
5、对字典进行排序
利用字典会保持其关键字的顺序,可以方便地进行排序操作。从第一个字典创建第二个字典,关键字已经处于排序状态,然后使用dictmerge命令与第一个字典的值组合。例如:
proc sortDict {dictionary} {
set sorted {}
foreach key [Isort [dict keys $dictionary]]{
dict set sorted $key {}
}
return [dict merge $sorted $dictionary]
}
sortDict $example
→firstname Annsurname Huan title Miss