Tcl-11. 列表操作

news2024/11/24 19:04:58

Tcl 中的列表操作:

列表则是具有特殊解释的字符串。Tcl 中的列表操作和其它 Tcl 命令 一样具有相同的结构。

列表可应1用在诸如 foreach 这样的以列表为变元的循环命令中,也应于构建 eval 命令的延迟命令字符串

一、list 命令

list 命令用来创建列表。 一个列表可以包含子列表,即列表可以嵌套。 

>set l1 [list Sun Mon Tues]

=>Sun Mon Tues ; #列表 l1 含有三个元素

>set l2 [list $l1 Wed]

=> {Sun Mon Tues} Wed ; #列表 l2 中含有两个元素。第一个元素用花括号括起来。

>set b 10

>set l3 [list { a $b c} d]

=>{a $b c} d ;#花括号阻止引用替换

>set l3 [list "a $b c" d]

=> {a 10 c} d

在创建 list 的时候比较灵活,有时比较难以理解和容易出错,特别是花括号。如何理解花括号的作用呢?可以这么简单认为:花括号内部代表的是子列表。当用 list 命令创建列表的时 候,如果元素是单个的词,就不用大括弧括起来,但如果某个元素是以空格分割的字符串时, 就将其看作一个子列表而用花括号括起来。注意实际的处理过程并不是这样的,要复杂一些。

二、concat 命令

concat 命令以空格为分隔符将多个列表拼装在一起形成新的列表。

list 命令和 concat 命令都可以完成列表合并功能。list 命令保留每个列表的结构,将每个列表作为一个整体生成新列表的元素来完成。而 concat 命令则要先把各个列表的最外层列表结构去掉,将其中的所有元素取出来作为新列表的元素来完成合并,即新列表的每个元素也是合并前列表的元素。

>set x {1 2}

=> 1 2

>set y "$x {3}"

=>1 2 {3}

>set y [list $x {3}]

=>{1 2} 3; #list 命令保留了每个列表的结构

=>set y [concat $x {3}]

=>1 2 3

三、lappend 命令

lappend 命令用来将新元素追加到列表末尾。

>lappend new 1 2

=> 1 2

>lappend new {3 4} "5" {6} 7

=> 1 2 {3 4} 5 6 7

四、llength命令

llength 命令可以获得一个列表内元素的个数。

>set l1 "1 2 3 4 5"

=>1 2 3 4 5 ;#定义了一个字符串

>set num [llength $l1] ;#这里 l1 被看作列表了

=>5

这个例子中,先前定义的一个字符串被看作一个 list!(Tcl 中的 list 只不过是一个有特殊解 释的字符串)。 列表是用空格搁开的多个元素组成的字符串,而通过 list 相关命令得到了特殊解释。既然 list 是字符串,那么所有适用于字符串的操作命令也应该适用于列表。

五、Index命令

lindex 命令返回列表中指定位置的特定元素。列表索引从 0 开始记数!

>set x {1 3 5}

=>1 3 5

>lindex $x 0

=>1

>lindex $x end

=>5

六、lrange命令

lrange 命令返回一个指定区段的列表元素,可以以 end 或者 end-n 作为索引(n 为正整 数)。

>lrange {1 2 3 {4 5} 6} 2 end

=> 3 {4 5} 6

七、linsert 和 lreplace 命令

linsert 命令用来将元素插入到一个列表的由索引指定的位置。如果索引为 0 或者更小,则元 素就会被添加到最前面。如果索引值大于或者等于列表长度,则元素被追加到列表尾部。其他 情况元素被添加到指定位置之前。

lreplace 命令将一个指定区段的列表元素替换为新元素。如果没有指定新元素,则这个区域 的元素就会被从列表中删除。

注意:这两个操作不会改变原来列表的内容,而是返回一个新列表。

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

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

相关文章

城市内涝的解决措施,城市内涝积水监测预警系统解决方案

随着城市化进程的加快,城市土地面积不断扩大,原本吸收雨水的土地被水泥、沥青等硬质材料所取代,导致雨水无法迅速渗透和排泄,增加了城市内涝的风险。同时,气候变化带来的极端降雨事件频率增加,更加加剧了内…

mysql触发器监听数据投递中间件

目前市面上有许多的 CDC(Change Data Capture) 框架用于监听数据库的数据变动,例如:canal、Debezium、Maxwell等都是用来解析 binlog 日志实现事件的监听。但是有一个情况就是如果公司对 binlog 日志文件的权限管控的很严格&#…

传统ERP和SaaS ERP区别在哪里?

一、ERP和SaaS ERP概念 企业资源计划 (ERP) 系统是许多企业的主干,助力管理整个企业内的会计、采购流程、项目等。对于许多 IT 部门而言,ERP 系统通常意味着大型、昂贵且耗时的部署,并可能需要进行大量硬件或基础设施投资。然而,…

基于标准库函数的STM32的freertos的移植(三)——MDK工程搭建、配置与修改

1.打开MDK5软件,新建MDK工程,将新建工程文件保存在Project_Stm32f407/mdk文件夹下,并将工程命名为freertos_M4,选择MCU型号为STM32F407ZG,新建工程文件的步骤如下图所示: 图1 新建工程 图2 保存工程路径和工…

ChatGPT-AI地图

ChatGPT-AI地图 1、AI-对话 应用名称应用地址ChatGPThttps://chat.openai.com/NotionAINotion AIA.I. Data Sidekick:AI工具编写 SQL、文档等的速度提高10倍[AirOpsWritesonic:人工智能写作辅助工具Writesonic - Best AI Writer, Copywriting & Par…

《深入理解计算机系统(CSAPP)》第3章 程序的机器级表示 - 学习笔记

写在前面的话:此系列文章为笔者学习CSAPP时的个人笔记,分享出来与大家学习交流,目录大体与《深入理解计算机系统》书本一致。因是初次预习时写的笔记,在复习回看时发现部分内容存在一些小问题,因时间紧张来不及再次整理…

MySQL 数值函数

文章目录 数值函数1. abs(num)2. ceil(num)3. floor(num)4. mod(num1,num2)5. rand()6. round(num,n)7. truncate(num,n)8. sqrt(num) 数值函数 数值函数用来处理数值方面的运算,能够提高用户的工作效率。常用的数值函数如下表所示,函数括号内为输入的参…

牛客网基础语法11~20题

前言:今天是咱们第二期刷牛客网上的题目。 目标:对输入输出的格式,方法,类型掌握熟练,对double,float理解深入,编程思想更进一步。 鸡汤:人活着,再苦再累,都别…

16-Vue技术栈之常用的 Composition API

目录 1、什么是组合式 API?2、拉开序幕的setup3、ref函数4、reactive函数5、Vue3.0中的响应式原理5.1 vue2.x的响应式5.2 Vue3.0的响应式 6、reactive对比ref7、setup的两个注意点8、计算属性与监视8.1 computed函数8.2 watch函数8.3 watchEffect函数 9、 生命周期1…

防雷接地的施工工艺与防雷施工方案

雷电是自然界的一种强大而危险的自然现象,经常造成重大财产损失和人员伤亡。为了保护建筑物和人员免受雷电的危害,防雷接地系统的设计和施工至关重要。本文将介绍防雷接地的施工工艺和防雷施工方案,强调专业和符合国家标准的方法,…

chatgpt赋能python:Python中乘方运算符号:用于数学计算和科学计算

Python中乘方运算符号:用于数学计算和科学计算 简介 乘方运算是Python中常用的数学运算符,通常在数学计算和科学计算中使用。在Python中,乘方运算符用**表示。该运算符用于计算数字的指数幂。 用法 乘方运算符可以用于两个数字之间的计算…

vue开发环境搭建-win7

vue开发环境搭建-win7 1. 安装node,js2. 设置node global(全局)和cache(缓存)路径3. 配置环境变量4. 基于 Node.js 安装cnpm(淘宝镜像)5. 安装vue6. 安装vue脚手架 vue-cli7. 项目创建8. 添加相关依赖9. 修改端口号10. 运行项目 1. 安装node,js 下载no…

docker版jxTMS使用指南:python服务之内置自动机

本文讲解4.0版的jxTMS中python服务的内置自动机,整个系列的文章请查看:docker版jxTMS使用指南:4.0版升级内容 docker版本的使用,请参考:docker版jxTMS使用指南 4.0版jxTMS中python服务是一个采集前端数据的接口机。其…

【FreeMarker】学习笔记

【FreeMarker】学习笔记 【一】FreeMarker概述【1】FreeMarker概念【2】FreeMarker特性(1)通用目标(2)强大的模板语言(3)通用数据模型(4)为Web准备(5)强大的X…

opencv_c++学习(三十)

一、加载深度神经网络模型 Net cv:dnn::readNet(const String & model, const String & config "", const String & framework "")model:模型文件名称 config:配置文件名称 framework:框架种类 Net类中的函数名称以及作用: 向…

Eplan使用过程中的知识点1

一、新建时的几种标准模板 EPLAN中的符号库符合国际标准,分为单线图和原理图符号库。 符号库符合GB(国标)、IEC(国际标准)、NFPA(美国标准)和GOST(俄罗斯标准)4大标准。…

排水管网监测预警系统:全面感知管网运行态势

城市排水管网是城市基础设施系统中至关重要的一部分,它负责将雨水和废水排出城市,维持城市的正常运行。然而,随着管网的老化和城市扩张,排水管网出现了越来越多的问题,如泄漏、堵塞和损坏,给城市环境和公共…

一、机器人传动方式

1、齿轮传动 齿轮的最重要属性就是它的齿数。齿轮是根据齿数分类的。齿轮通常不会单独使用,齿 轮的基本属性就是可以将运动从一根轴传到其它轴上。 利用齿轮改变转速 利用齿轮改变转动方向 将旋转运动改变为直线运动 带自锁的涡轮蜗杆传动 齿轮可以用来传递力、增加…

Python中打印彩色信息的方法

在Python中,可以使用print()函数打印出彩色信息。在使用print()打印之前,需要调用os标准库对系统进行设置。 1 os标准库 1.1 简介 os是Operating System的简写,即“操作系统”。os标准库是一个操作系统接口模块,提供了使用操作…

关于Addressable打包图集与图片都打进去造成冗余

1)关于Addressable打包图集与图片都打进去造成冗余 ​2)Unity如何计算Root动画旋转 3)IL2CPP编译的Protobuf反射类运行时报空 4)为什么Active Constraints会出现过高的现象 这是第337篇UWA技术知识分享的推送,精选了UW…