Tcl学习笔记(三)——列表、数组、字典

目录

1.列表

创建、获取列表

添加、删除、替换列表元素

搜索列表元素、对列表元素排序

字符串和列表之间的转换

2.数组

创建数组

获取数组中的元素

删除数组中的元素

数组与列表之间的转换

3.字典

1.列表

        列表是Tcl中一种数据结构,是元素的有序集合,元素可以包含任何字符串,如空格、反斜线、换行符等,可以把列表赋值给一个变量、作为参数传给命令、嵌套到其他列表中。

创建、获取列表

        通过set命令创建列表,该命令后有两个参数:列表名、列表包含的元素。元素位于一个大括号之内且以空格为界,如果某个元素中包含空格,则将该元素放在大括号或双引号之内。

        也可以通过list命令创建列表,list之后直接跟列表元素(下图需要用[]进行命令替换)。

        命令concat将多个列表拼接在一起,构成一个新的列表,concat后跟随一个或多个列表。

        命令lrepeat通过重复元素集合创建列表,该命令后至少有两个参数:重复次数、重复元素、重复元素...。

列表中可以包含特殊字符,如"$""[]"等,可通过大括号或反斜线置换实现。

        命令llength获取列表长度,即列表所包含的元素个数,llength后跟随列表。

        命令lindex获取相应的列表元素,有两个参数:列表和索引参数。若索引参数超出列表的索引范围,则返回空字符串。对于嵌套的列表,索引参数可由一个或多个索引值构成,获取子列表中过的元素。

        命令lrange用于获取指定范围内的列表元素,有三个参数:列表、索引值1、索引值2。若索引值1=索引值则返回对应元素;若索引值2<索引值1则返回空列表。

        命令lassign可以获取列表元素的同时将其分配给指定变量,有一个或多个参数:列表、变量名...。若列表长度大于变量个数则lassign将列表元素分配给对应变量的同时,返回未被分配的列表元素;若列表长度小于变量个数,lassign会给多于变量分配一个空字符。

添加、删除、替换列表元素

        命令lappend向列表末尾添加新元素,lappend接收的第一个参数存放列表的变量名而非列表本身,是一种”原地“操作,第二个参数开始为新添加的元素(一个或多个)。

        命令linsert向列表的指定位置添加新元素,有三个或多个参数:列表、新元素的起始索引、新元素...,返回值是一个由原列表和新元素构成的新列表,但原列表并没有被改动。

        命令lreplace用于删除列表元素,有三个参数:列表、待删除部分元素的起始索引、终止索引,返回删除元素后的新列表,但原列表并没有被改动。

        命令lreplace用于替换列表中的元素,有四个参数,前三个参数不变,第四个参数为替换元素,同样原列表并没有被改动。

        命令lset可以对列表进行原地替换,有三个参数:列表变量名、替换索引、替换值。如果lset的索引参数超过了给定列表的索引范围,则会报错。

搜索列表元素、对列表元素排序

        命令lsearch在列表中査找指定的元素,有两个参数:列表、匹配,返回列表中第一个与指定模式匹配的元素的索引,如果没有匹配的元素则返回-1。lsearch有三种搜索模式,-glob、-exact、-regexp。-glob 指定匹配按照 stringmatch命令的规则进行;-regexp指定匹配按照正则表达式规则进行;-exact 则要求进行严格匹配。如果没有指定匹配方式,那么默认设置为-glob。

-all选项使得lsearch返回列表中所有与给定模式匹配的元素索引。

-inline选项返回与给定模式匹配的列表元素而非索引,且可与-all同时使用。

-start选项限定搜索的起始索引,,且可与-all、-inline等同时使用。

-not选项可对匹配结果取反,且可与-all、-inline同时使用。

        命令lsort可对列表元素排序,只有一个列表参数,返回值为排序后的结果。默认按照-ascii -increasing的顺序排序。

-integer要求列表中的元素都是整数,进行升序排序。

-real要求列表中的元素都是浮点数,进行升序排序。

-unique对列表排序的同时还会去掉重复的元素。

-index可指定子列表中的元素索引对子列表进行排序。

        in操作符用于如果指定元素再给定列表里,则表达式返回值为1、否则为0;ni(not in)与in相反。

字符串和列表之间的转换

        在Tcl中所有的数据类型都可被视为字符串,而字符串本身则由一个或多个字符组成,那么列表就可以看作由一个或多个相对独立的字符串构成,因此二者在一定条件下可以相互转换。

        命令split可将字符串按照指定规则进行分割,并返回分割后由哥哥字符串构成的列表。有两个参数:字符串变量、分割字符,分割字符可以是空元素、一个字符或多个字符。如果字符串中连续出现分割字符,或分割字符出现在字符串的开头或借位,则返回结果中会产生空元素。

        命令join把列表元素拼接成一个字符串,元素之间用指定的分割字符隔开,有两个参数:列表、分割字符,分割字符可以是空元素或换行符。

2.数组

        Tcl中数组是一系列元素的集合,每个元素都是由元素名称和值构成的变量,元素名称由数组名和数组中的元素名构成。创建数组的过程就是对变量进行赋值的过程。在Tcl中任何合法的字符串都课题作为数组名或元素名,也可以作为变量值。元素名与值是成对创建的,因此数组也被称为关联数组(Associative Array)。

创建数组

        可通过set命令、array set命令创建数组

        命令array exists判断指定数组是否已被创建,若被创建则返回1、否则返回0.

        命令array size获取指定数组的大小,即元素的个数。

获取数组中的元素

        已知数组名和元素名,可以获取相对应的值。若数组中的元素是变量,则要获取变量名,再通过变量置换符$获取变量值。

        命令array names可返回一个包含指定数组元素名的列表。

        命令array get可获得指定数组的“元素名 值”列表,也可用于赋值数组。

        命令parray用于输出数组的“元素名 值”对。

删除数组中的元素

        命令unset用于删除变量(数组中的元素)或数组,只有一个参数即待删除变量名或数组名。

数组与列表之间的转换

        通过foreach语句对列表进行遍历,创建数组。

3.字典

Leon Sun | Array VS Dict in Tcl (ileonsun.github.io)

  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值