2022年的 Tcl 编程语言入门参考 4.数组、列表、字典
数据集合的特点:可以添加、删除、修改元素可以查询/统计元素可以对元素进行遍历操作
数据集合的作用,就相当于变量的Excel表格,还可以扩展出一些魔法操作(比如早先Python用字典实现switch功能)
数组
TCL语言的数组是变量的无序集合,无序指的是数组里的变量没有顺序。使用数组的时候,就由数组的名字加上元素的名字来指定具体是哪个变量。
用set命令创建/设置数组,用法跟变量一样。如果数组不存在,就会自动创建数组;元素不存在就会自动创建元素。
模拟多维数组
Tcl语言本身不支持多维数组(元素本身也是数组)。但因为一切都是字符串,所以可以模拟出多维数组的效果
数组专用的array命令,有很多功能(一堆预设参数)
数组遍历是通过一系列命令实现的(还需要配合条件判断或逻辑循环命令,比如if、for、while等等):
array startsearch 返回一个本次遍历行为的代号
array nextelement 列出当前遍历进度的元素名称,没有时返回空字符(即当前遍历进度已经到达数组末尾)
array anymore 如果遍历进度后面还有元素就返回1,否则返回0
array donesearch 终止遍历,并删除"标记"
可以对数组同时进行多组遍历,遍历过程中对数组添加或删除元素,则所有遍历行为都将终止,等同于调用donesearch

列表
"哔哩哔哩 NASDAQ:BILI 2022-04-08 27.02 27.66 25.66 25.71 11.72M"
列表是可以嵌套的,即元素本身也是列表,比如:
"{奇奇 恰恰 蹦蹦} 啦啦"
列表有一系列命令:
list - 创建一个列表
lrepeat - 使用重复的元素创建列表
split - 将字符串分解成Tcl列表
concat - 将多个列表合并成一个列表
join - 把列表元素合并成一个字符串
lappend - 将元素添加到列表末尾
lassign - 将列表元素赋值给变量
lindex - 从列表中获得元素
linsert - 以插入元素的形式生成新列表
llength - 计算列表的元素个数
lrange - 返回列表中的一个或者多个临近的元素
lreplace - 在一个列表中使用新的元素替代其它元素
lreverse - 反转列表元素的顺序
lsearch - 在列表中寻找特定元素
lset - 修改列表元素
lsort - 给列表中的元素排序、去除重复元素
lmap - 遍历列表并重新整合
按照Tcl近些年的发展思路,这些功能应该都整合到list命令里面(就像chan命令那样)。但毕竟用了这么多年了,尾大难掉头。

Tcl的字典看上去跟偶数长度的列表相同,也是一种有特殊格式规则的字符串。字典的元素名,也称为关键字,英文是key。
dict命令用来操作字典,这个命令有一大堆预设参数(相当于子命令)。
append
dict append 字典名 关键字 字符串
为元素追加字符串或把元素追加到字典后面。字符串有多个值时,会拼接成一个字符串
exists
dict exists 字典 关键字 ?嵌套字典关键字?
检验字典元素是否存在
过滤
以三种方式过滤出字典内的键值对
dict filter 字典 key/value/script "规则"
for遍历操作
map遍历修改,返回新字典
incr增加元素值
update更新元素值
with命令
与update类似,自动将元素名作为变量名引入最后的代码段
其它简单子命令