欢迎光临散文网 会员登陆 & 注册

2022年的 Tcl 编程语言入门参考 4.数组、列表、字典

2022-04-10 18:02 作者:象喻  | 我要投稿

这三者都属于数据的集合(相当于把一堆数据打个包的感觉),集合中的数据被称为元素(大部分语言都叫元素)。绝大多数编程语言都有这些概念,但是具体实现千差万别。尤其是Tcl语言,跟流行语言的差异还是很大的,毕竟这是只有字符串的世界。

数据集合的特点:可以添加、删除、修改元素可以查询/统计元素可以对元素进行遍历操作

数据集合的作用,就相当于变量的Excel表格,还可以扩展出一些魔法操作(比如早先Python用字典实现switch功能)

数组

TCL语言的数组是变量的无序集合,无序指的是数组里的变量没有顺序。使用数组的时候,就由数组的名字加上元素的名字来指定具体是哪个变量。

用set命令创建/设置数组,用法跟变量一样。如果数组不存在,就会自动创建数组;元素不存在就会自动创建元素。

⚠️注意:元素名始终被识别为字符串,所以1.0跟1不一样。元素名不要带空格,会引起很多麻烦

模拟多维数组

Tcl语言本身不支持多维数组(元素本身也是数组)。但因为一切都是字符串,所以可以模拟出多维数组的效果

数组 array 命令

数组专用的array命令,有很多功能(一堆预设参数)

数组遍历

数组遍历是通过一系列命令实现的(还需要配合条件判断或逻辑循环命令,比如if、for、while等等):

array startsearch 返回一个本次遍历行为的代号

array nextelement 列出当前遍历进度的元素名称,没有时返回空字符(即当前遍历进度已经到达数组末尾)

array anymore 如果遍历进度后面还有元素就返回1,否则返回0

array donesearch 终止遍历,并删除"标记"

可以对数组同时进行多组遍历,遍历过程中对数组添加或删除元素,则所有遍历行为都将终止,等同于调用donesearch

列表

编程语言中,"列表"是有序数据集合。Tcl的列表是字符串的有序集合,也就是说首先是字符串,其次它有顺序。Tcl的列表以空白字符分隔各个元素,比如下面的字符串就符合Tcl列表的形式:

"哔哩哔哩  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命令那样)。但毕竟用了这么多年了,尾大难掉头。

字典

字典是由成对的“元素名 - 元素值”组成的有序集合(部分语言的字典是无序的,比如早期的Python)。字典的优势在于,可以通过元素名提取值,并且元素名是有顺序的。此外,字典的值可以是多种形式。

Tcl的字典看上去跟偶数长度的列表相同,也是一种有特殊格式规则的字符串。字典的元素名,也称为关键字,英文是key。

dict命令用来操作字典,这个命令有一大堆预设参数(相当于子命令)。




append

dict append 字典名 关键字 字符串

为元素追加字符串或把元素追加到字典后面。字符串有多个值时,会拼接成一个字符串



exists

dict exists 字典 关键字 ?嵌套字典关键字?

检验字典元素是否存在


过滤

以三种方式过滤出字典内的键值对

dict filter 字典 key/value/script "规则"




for遍历操作


 

map遍历修改,返回新字典

incr增加元素值

update更新元素值

 

with命令

与update类似,自动将元素名作为变量名引入最后的代码段

 


其它简单子命令





2022年的 Tcl 编程语言入门参考 4.数组、列表、字典的评论 (共 条)

分享到微博请遵守国家法律