TCL --- 列表_part2

0 回顾

列表part0和part1描述了列表的创建,修改,获取,搜索等相关命令。接下来这篇文章将介绍列表的排序和拼接。通过这三篇文章的描述,详细大家对列表具有一个详细并且系统的认识。

1 排序

排序是一个老生常谈的话题。最最最常见的排序方式就是升序,降序,unique以及字典等。下面将挨个介绍。

  • lsort命令格式
    lsort <options> list0
    该命令实现列表list0元素排序的功能。其中,option表示命令lsort包含的选项,一般以“-”开头。常见的option包含:-decreasing,-increasing,-unique, -directionary(非常常用的一个选项),-integer,-real。 它们分别表示降序,升序,唯一,字典,整数(从小到大)和浮点数(从小到大);list0表示列表本身,而不是列表名称。

    • decreasing表示列表中的元素从大到小排列
    • increasing表示列表中的元素从小到大排列
    • unique表示删除队列中重复的元素
    • directionray表示按照字典(数字>小写字母(a-z)>大写字母(A-Z),其中数字从小到大,通常用于文件的排序)的方式对列表中的元素进行排序
    • integer表示列表的元素按照从小到大的方式排列,排列的对象只能是整数
    • real表示列表的元素按照从小到大的方式排列,排列的对象是浮点数或者整数。(整数1也可以认为是浮点数1.0)
  • 基础示例

    # Example1
    # 创建列表x_list0
    set x_list0 [list John Anne Mary Jim]
    # 列表x_list0按照降序排列其中的元素
    lsort -decreasing $x_list0
    # 结果:Mary John Jim Anne# Example2
    # 列表x_list0按照升序排列其中的元素
    lsort -increasing $x_list0
    # 结果: Anne Jim John Mary# Example3
    # 创建列表x_lsit0
    set x_list0 [list B a C 10 2]
    # 列表x_lsit0按照升序排列其中的元素
    lsort -increasing $x_list0
    # 结果: 10 2 B C a# Example4
    # 创建列表x_list1
    set x_lsit1 [list apple  Banana Zebra 123]
    # 列表x_list1按照字典的方式排列其中的元素
    lsort -dictionary $x_lsit1
    # 结果:123 apple Banana# Example5
    # 创建列表x_list1
    set x_list1 [list n1.gif n10.gif n9.gif n11.gif]
    lsort -dictionary $x_lsit2
    # 结果: n1.gif n9.gif n10.gif n11.gif# Example6
    # 创建列表x_list2
    set x_lsit2 [list apple Banana Zebra apple]
    # 删除列表x_list2中重复的元素
    lsort -unique $x_list2
    # 结果:apple Banana Zebra# Example7
    # 创建列表x_list3
    set x_list3 [list 100 5 20]
    # 列表x_lsit3按照整数的方式从小到大
    lsort -integer $x_list
    # 结果:5 20 100# Example8
    # 创建队列x_list4
    set x_list4 [list 100 5.23 20.10]
    lsort -real $x_list4
    # 结果: 5.23 20.10 100
    
  • 解析
    Example1~3展示了increasing和decreasing的基础示例。其中,Example3混合了数字和字母,该实例是想说,increasing和decreasing排序每次比较一个字符的ASCII码,若相同则比较下一个字符;直到两者不同为止。字母和数字对应的ASCII码如下所示:

    数字:0-9: 48-57
    小写字母:a-z: 65-90
    大写字母:A-Z: 97-122
    

这就很好的解释了Example3中为啥“10”会排在“2”的前面。ASIC或者FPGA的follow中通常需要将多个文件进行排序,为此increasing和decreasing就显得不那么友好,此时推荐使用dictionary。
Example8中100在排序时被当作100.0看待,即Tcl在排序前做了浮点类型的转换。

2 拼接

  • split命令格式
    split str0 str1
    该命令将字符串str0根据分隔符str1进行切分,并且返回一个列表。或者说,split命令会找到字符串str0中所有的分隔符,返回一个列表,列表中的元素就是分隔符str1之间的元素。其中,分隔符可以是空字符,单个字符或者多个字符;str0是字符串变量,而不是字符串的名字;str1可以是字符串,或者字符串变量。可以分成三种情况理解:
  1. 若分隔符str1是空字符, 则字符串str0的所有字符都被切分,即使是空格。即空格也会被分成一个单一的字符。
  2. 若分隔符str1是单个字符,则字符串str0将被分隔符str1进行切分;切分后的部分组成一个列表。
  3. 若分隔符str1是多个字符,则只要字符串str0中有一个字符和分隔符str1中的字符匹配,则字符串str0被切分一次;若连续两个字符都和分隔符匹配(分隔符挨个匹配),则进行连续切分,获得一个空字符;最终切分的元素返回一个列表。
  • 基础示例

    # 创建字符串x_str0
    set x_str0 xbaybz
    set x_str1 {}
    split $x_str0 $x_str1
    # 结果:x b a y b z# 创建分隔符,并且分隔符是单个字符
    set x_str1 b
    split $x_str0 $x_str1
    # 结果:x ay z# 创建分隔符,并且分隔符多个字符
    set x_str1 ab
    split a {} y z
    
  • 解析
    第一个实例中分隔符是空字符,因此,x_str0中的所有元素都将被切分。
    第二个实例中分隔符是单个字符。字符串xbaybz将被分隔符b切分,切分后的部分组成一个列表,列表的元素为字符串切分后的各个部分。
    第三个实例中分隔符是多个字符。字符串xbaybz将被分隔符ab切分。同学们看到这个结果可能会很意外。其实很简单,我们把多个分隔符拆成多个单字符的分隔符就可以了。如本实例中,分隔符为“ab”,那咱们就看成两个分隔符,分别为分隔符a和分隔符b。在切分过程中,字符串xbaybz同时和分隔符a,分隔符b进行匹配。只要其中一个匹配,则进行切分,随后进入下一个字符的比较。详细流程如下所示:
    step1: 字符串中的第一个字符x和分隔符a进行匹配,发现不匹配;随后进行字符x和分隔符b进行匹配,发现不匹配。进入step2;
    step2: 字符b和分隔符a不匹配,随即进行字符b和分隔符b进行匹配,此时匹配成功,进行切分。故列表的第1个元素是x。进入step3;
    step3: 字符a和分隔符a进行匹配,匹配成功,进行切分。此时获得一个空元素。故列表的第2个元素是一个空字符串。进入step4;
    step4…
    最终,列表的元素为: a {} y z。

  • join命令格式
    join list0 str0
    该命令可以理解为split命令的逆操作。将列表lsit0中的各个元素按照分隔字符串str0进行拼接,最终获得一个字符串。其中,分隔字符串可以是任意多个字符串,包括空字符串。另外值得说明的是,list0和str0都是变量,而不是变量名称。

  • 基础示例

    # 创建列表x_list0
    set x_list0 [list {} usr include sys types.h]
    # 创建分隔字符串
    set split_str0 "/"
    join  $x_list0 $split_str0
    # 结果: /usr/include/sys/types.h# 创建列表x_list1
    set x_list1 [list 24 112 5]
    # 创建分割字符串
    set split_str1 "+"
    expr [join $x_list1 $split_str1]
    # 结果:141
    
  • 解析
    第一个实例实现了文件路径的拼接,为了实现usr前面带一个“/”,待拼接的列表x_list0需要包含一个空元素。即可以实现usr作为根目录。
    第二个实例实现列表数字的累计,是一个较为特殊的用法。该实例中,首先将列表的元素按照分割字符串“+”进行拼接;随后将拼接好的字符串传入expr;最后经过expr的计算,获得最终的结果。

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

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

相关文章

Kafka 单机多 Broker 实例集群搭建 | 详情

全文目录&#xff1a;开篇语前言1. Kafka 集群架构2. 环境要求2.1 安装 Java2.2 安装 Zookeeper3. 安装 Kafka4. 创建 Topic4.1 查看创建的 Topic5. 测试 Kafka 集群5.1 生产者&#xff08;Producer&#xff09;测试5.2 消费者&#xff08;Consumer&#xff09;测试6. 小结文末…

Ajax——异步前后端交互提升OA系统性能体验

本文介绍了Ajax中的基础使用&#xff0c;包括XMLHttpRequest的状态变化、并使用BMI 场景的示例进行介绍&#xff0c;以及结合 DAO 和 Servlet 处理OA系统复杂业务逻辑和JSON数据的处理等等。 本文目录一、Ajax 基础html页面二、 XMLHttpRequestXMLHttpRequest的状态变化同步和异…

【最后一个单词的长度】

思路 逆向遍历&#xff1a; 从字符串末尾开始向前遍历&#xff0c;跳过末尾的空格&#xff0c;直到找到非空格字符。 遇到非空格字符时开始计数&#xff0c;直到再次遇到空格或字符串开头。 状态标记&#xff1a; 使用 state 标记是否已经进入最后一个单词的计数阶段&#xff1…

OpenCV学习 day3

一、灰度实验 将彩色图像转换为灰度图像的过程称为灰度化&#xff0c;这种做法在图像处理中和计算机视觉领域非常常见 1、灰度图 灰度图是一种 单通道图像&#xff0c;每个像素仅存储 亮度信息&#xff08;0纯黑&#xff0c;255纯白&#xff09;&#xff0c;没有颜色信息&#…

基于单片机一氧化碳CO检测/煤气防中毒检测报警系统

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 基于单片机的CO检测系统通过传感器实时监测环境中的一氧化碳浓度&#xff0c;结合信号处理电路与…

前端-移动Web-day3

目录 1、视口 2、rem体验 3、rem基本使用 4、媒体查询 5、rem适配 6、rem布局 7、less-体验 8、less-注释 9、less-运算 10、less-嵌套 11、less-变量 12、less-导入 13、less-导出 14、less-禁止导出 15、案例-极速问诊 1、视口 <!DOCTYPE html> <htm…

【正点原子K210连载】第二十四章 按键输入实验 摘自【正点原子】DNK210使用指南-CanMV版指南

第二十四章 按键输入实验 本章实验将介绍如何使用CanMV让Kendryte K210获取板载按键的状态。通过本章的学习&#xff0c;读者将学习到在CanMV下读取Kendryte K210的GPIO上的高低电平状态。 本章分为如下几个小节&#xff1a; 14.1 maix.GPIO模块介绍 14.2 硬件设计 14.3 程序设…

基于springboot/java/VUE的旅游管理系统/旅游网站的设计与实现

用户&#xff1a;注册&#xff0c;登录&#xff0c;旅游景点&#xff0c;酒店信息&#xff0c;旅游线路&#xff0c;公告信息&#xff0c;留言板&#xff0c;后台管理&#xff0c;个人中心&#xff0c;门票预订管理&#xff0c;酒店预订管理管理员&#xff1a;登录&#xff0c;…

Python Excel 高阶教程:使用 Spire.XLS 插入、修改和删除迷你图

Python 操作 Word 文档&#xff1a;主流库对比与选择指南 在办公自动化、报告生成、数据处理等领域&#xff0c;利用 Python 程序化地创建、读取或修改 Microsoft Word 文档 (.docx 格式) 是一项非常实用的技能。Python 生态中有多个优秀的库可以完成这项任务&#xff0c;但它…

WebPages PHP:深入解析PHP在网页开发中的应用

WebPages PHP&#xff1a;深入解析PHP在网页开发中的应用 引言 随着互联网技术的飞速发展&#xff0c;PHP作为一种开源的脚本语言&#xff0c;已经在网页开发领域占据了举足轻重的地位。本文将深入探讨PHP在网页开发中的应用&#xff0c;包括其优势、常用框架、开发流程以及未来…

【深度学习】【三维重建】windows11环境配置PyTorch3d详细教程

【深度学习】【三维重建】windows11环境配置PyTorch3d详细教程 文章目录【深度学习】【三维重建】windows11环境配置PyTorch3d详细教程前言确定版本对应关系源码编译安装Pytorch3d总结前言 本人windows11下使用搭建PyTorch3d环境&#xff0c;故此以详细教程以该算法依赖的环境…

SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:日志管理(四)集成Spring Security

目录 一、前言 二、后端开发及调整 1.日志管理开发 2.配置调整 3.日志入库&#xff08;注解、切面&#xff09; 三、前端调整 1.日志管理开发 四、附&#xff1a;源码 1.源码下载地址 五、结语 一、前言 此文章在上次调整的基础上开发后端管理系统的用户请求日志功能&…

ceph 14.2.22 nautilus Balancer 数据平衡

Ceph Balancer (upmap 模式) 启用与配置 在 Ceph Nautilus (14.2.22) 版本中启用和配置 Balancer 的完整步骤 1. 前提检查 检查集群的初始状态和版本。 集群状态 (ceph -s)cluster:id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxhealth: HEALTH_OKservices:mon: 3 daemons, quo…

在Linux上对固态硬盘进行分区、格式化和挂载的步骤

在Linux上对固态硬盘进行分区、格式化和挂载的步骤如下&#xff1a; 插入固态硬盘&#xff1a;将固态硬盘插入计算机的SATA或M.2接口。 确认固态硬盘被识别&#xff1a;打开终端&#xff0c;输入以下命令查看硬盘是否被系统识别 fdisk -l 查找硬盘列表中的固态硬盘&#xf…

用Unity结合VCC更改人物模型出现的BUG

1、上传模型时出现错误经过排查是因为服装发型预制体放到人物模型上之后&#xff0c;物体上自动多了一个空脚本&#xff0c;怀疑是VRC工具箱自动添加的。解决方法&#xff1a;在上传前将带有空脚本的物体上的组件删除即可2、添加头发时出现模型碰撞错误按照【【VRCHAT】从零开始…

k8s之DevicePlugin

解密 Kubernetes Device Plugin&#xff1a;让容器轻松驾驭特殊硬件 在容器化技术飞速发展的今天&#xff0c;容器凭借轻量、隔离、可移植的特性成为应用部署的主流选择。但在实际应用中&#xff0c;当容器需要访问 GPU、FPGA 等特殊硬件资源时&#xff0c;事情就变得不那么简单…

动态规划Day7学习心得

今天给动态规划扫个尾&#xff0c;还有两题。 第一道&#xff1a;647. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 暴力解法 两层for循环&#xff0c;遍历区间起始位置和终止位置&#xff0c;然后还需要一层遍历判断这个区间是不是回文。所以时间复杂度&#xff1a;O…

SpringCloud实战:机器人对战系统架构

基于Spring Cloud的机器人对战 以下是基于Spring Cloud的机器人对战实例相关案例和技术实现方向的整理,涵盖微服务架构设计、通信机制及典型应用场景: 分布式对战系统架构 采用Spring Cloud Alibaba+Nacos实现服务注册与发现,每个机器人实例作为独立微服务部署。通过Open…

LLM 核心能力解构与项目实践指南

大语言模型&#xff08;LLM&#xff09;的爆发式发展&#xff0c;本质上是其核心能力在产业场景中的规模化验证。作为技术博主&#xff0c;本文将系统拆解 LLM 的六大核心能力&#xff0c;结合工业级项目案例&#xff0c;提供从能力映射到工程实现的完整技术路径&#xff0c;并…

retro-go 1.45 编译及显示中文

最近做了个使用 retro-go 的开源掌机 基于ESP32-S3的C19掌机&#xff08;适配GBC外壳&#xff09; - 立创开源硬件平台 &#xff0c;做完后用提供的固件发现屏幕反显了&#xff0c;估计是屏幕型号不太对&#xff0c;随即自己拉 retro-go 官方库来编译&#xff0c;拉取的最新的 …