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

news2024/11/16 21:28:43

目录

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1611139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Qt网络编程]之获取基本网络信息

目录 前言 获取主机IP地址 获取主机 IP 地址和子网掩码 获取主机 MAC 地址 前言 获取主机的网络地址和接口信息是进行网络编程的第一步&#xff0c;也是网络编程的基础。Qt提供了网络接口类 QNetworkInterface、网络地址人口类 QNetworkAddressEntry 和主机地址类 QHostAd…

Windows 下最好用的流程图软件Visio

keywords: Visio 小问题记录 连接线箭头 如果在 Visio 2013/2016 里画流程图&#xff0c;发现连接线没有箭头&#xff0c;检查一下「设计」菜单里是否将主题设置成了「无主题」&#xff0c;如果是&#xff0c;取消掉就好了。 鼠标悬停提示 把鼠标悬停在图形上四周应该有几…

“手撕“三大特性之一的<继承>(上)

目录 一、为什么需要继承 二、什么是继承 三、继承怎么写 四、成员的访问 1.父类与子类的成员变量不同名 2.父类与子类的成员变量同名 3.父类与子类的成员方法不同名 4.父类与子类的成员方法同名 五、super关键字 一、为什么需要继承 先让我们看一段Java代码&#…

【大模型应用极简开发入门(1)】LLM概述:LLM在AI中所处位置、NLP技术的演变、Transformer与GPT、以及GPT模型文本生成逻辑

文章目录 一. AI中大语言模型的位置与技术发展1. 从AI到Transformer2. NLP&#xff1a;自然语言处理3. LLM大型语言模型&#xff1a;NLP的一种特定技术3.1. LLM定义3.2. LLM的技术发展3.2.1. n-gram模型3.2.2. RNN与LSTM 二. Transformer在LLM中脱颖而出1. Transformer架构能力…

不敢说懂你 - Glide硬核源码剖析

问题 Glide加载流程? Glide整体架构? Glide数据加载的来源? Glide缓存加载的流程? Glide线程切换原理? Glide如何感知Activity? Glide哪种情况会返回应用级的RequestManager? … 带着一些问题去阅读… 使用示例 本篇主要基于glide:4.12.0进行分析。下面是Gli…

[论文阅读链接]

CVPR2023&#xff1a;Learning Human-to-Robot Handovers from Point Clouds http://t.csdnimg.cn/OfSnShttp://t.csdnimg.cn/OfSnS仿真工具&#xff1a;dm_control: Software and Tasks for Continuous Control dm_control 翻译: Software and Tasks for Continuous Control…

python免费调用阿里云通义千问(q-wen-max)大模型API

文章目录 通义千问开通免费API Keypython调用阿里云通义千问API 通义千问 通义千问&#xff0c;是基于阿里巴巴达摩院在自然语言处理领域的研究和积累。采用更先进的算法和更优化的模型结构&#xff0c;能够更准确地理解和生成自然语言、代码、表格等文本。 支持更多定制化需…

js 特定索引下拆分字符串并组建成新的字符串数据

要在特定索引处拆分字符串&#xff0c;请使用 slice 方法获取字符串的两个部分&#xff0c;例如 str.slice(0, index) 返回字符串的一部分&#xff0c;但不包括提供的索引&#xff0c;而 str.slice(index) 返回字符串的其余部分。 过程&#xff1a;我们创建一个可重用的变量&a…

Linux-用户管理类命令实训

查看根目录下有哪些内容 进入/tmp目录&#xff0c;以自己的学号建一个目录&#xff0c;并进入该目录 像是目前所在的目录 在当前目录下&#xff0c;建立权限为741的目录test1 在目录test1下建立目录test2/test3/test4 进入test2&#xff0c;删除目录test3/test4 &#xff08;7&…

paddle.net怎么付款?paddle.net怎么订阅?

有需要的小伙伴可以使用Fomepay的卡进行订阅支付&#xff0c;我这里使用的是491090卡段&#xff0c;开卡步骤很简单&#xff0c;点击获取卡片 1、注册 2、填写姓名使用拼音或者英文名都可以 3、支付宝或者微信支付

JavaWeb-登录校验

会话技术 浏览器使用的是http协议&#xff0c;多次请求间数据是不能共享的&#xff0c;例如我们要去访问用户数据的接口&#xff0c;但这时候用户是否已经登入了呢&#xff1f;是不知道的&#xff0c;为了解决这个问题&#xff0c;于是引入了会话跟踪技术。 会话&#xff1a;…

一次Ambari安装记录

引言 Ambari是一个开源的Apache项目,它提供了一个直观易用的Web界面,用于管理、监控和配置Apache Hadoop集群。它是一个集群管理工具,可以帮助管理员轻松地部署、管理和监控Hadoop集群的各种组件,如HDFS、YARN、MapReduce、Hive、HBase等。通过Ambari,用户可以在集群中添…

【GPTs分享】GPTs分享之Image Recreate | img2img​

简介 该GPT是一个专门用于图像编辑、重建和合并的工具。它通过详细的自动图像描述和生成&#xff0c;帮助用户从源图像中重现或修改图像。此工具设计用于为视障用户提供图像内容的详细描述&#xff0c;并生成全新的图像&#xff0c;以满足特定的视觉需求。 主要功能 \1. 图像…

存储人视角:人工智能AI + 大模型

原文来自于知乎存储专栏&#xff1a; 存储人视角&#xff1a;人工智能AI 大模型 前沿 我的角色 背景 AI 出场 效果 一个宠娃狂魔 娃喜爱并有奥特曼玩具 她的奥特曼玩具会跳舞了 娃对我的崇拜和爱又多了一分......amazing 杭州网商路艾弗森 球队需要制作LOGO 形象生动…

【学习】对于加密接口、签名接口如何进行性能测试

随着科技的飞速发展&#xff0c;加密接口和签名接口在我们的日常生活中扮演着越来越重要的角色。从在线支付到信息安全&#xff0c;它们始终默默地守护着我们的数字世界。然而&#xff0c;随着应用场景的不断扩展&#xff0c;性能测试变得尤为重要。今天&#xff0c;让我们一起…

【6】mysql查询性能优化-关联子查询

【README】 0. 先说结论&#xff1a;一般用inner join来改写in和exist&#xff0c;用left join来改写not in&#xff0c;not exist&#xff1b;&#xff08;本文会比较内连接&#xff0c;包含in子句的子查询&#xff0c;exist的性能 &#xff09; 1. 本文总结自高性能mysql 6…

PLC中连接外部现场设备和CPU的桥梁——输入/输出(I/O)模块

输入&#xff08;Input&#xff09;模块和输出&#xff08;Output&#xff09;模块简称为I/O模块&#xff0c;数字量&#xff08;Digital&#xff0c;又称为开关量&#xff09;输入模块和数字量输出模块简称为DI模块和DQ模块&#xff0c;模拟量&#xff08;Analog&#xff09;输…

求a+aa+aaa+……(C语言)

一、题目&#xff1b; 二、N-S流程图&#xff1b; 三、运行结果&#xff1b; 四、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int a 0;int n 0;int i 0;int result 0;int tn 0;//提示用户&am…

Linux学习第52天:Linux网络驱动实验(二):一往(网)情深

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本节笔记的目录如下&#xff1a; 四、I.MX6ULL网络驱动简介 1.I.MX6ULL网络外设设备树 2.I.MX6ULL网络驱动源码简析 3.fec_netdev_ops操作集 4.Linux内核PHY子…

删除word中下划线的内容

当试卷的题目直接含答案&#xff0c;不利用我们刷题。这时如果能够把下划线的内容删掉&#xff0c;那么将有利于我们复习。 删除下划线内容的具体做法&#xff1a; ①按ctrl H ②点格式下面的字体 ③选择下划线线型中的_____ ④勾选使用通配符并在查找内容中输入"?&qu…