首页 > 其他分享 >Tcl 列表操作

Tcl 列表操作

时间:2024-04-13 16:55:25浏览次数:25  
标签:set 元素 list 列表 命令 Tcl new 操作

1. 列表命令集 

列表相关命令 

命令 说明
list arg1 arg2 ... 创建一个列表
lindex list index 返回列表 list 中的第 index 个元素( element)值
llength list 计算列表 list 元素个数
lrange list index1 index2 返回指定范围内(从 index1 到 index2)的元素
lappend list arg1 arg2 ... 将新元素追加到原来列表 list 后组成新的列表
linsert list index arg1 arg2 ... 将新元素插入到 list 中位于 index 元素之前的位置上
lreplace list index1 index2 arg1 arg2 ... 替换指定范围的元素
lsearch ?mode? list value 根据匹配模式 mode,查找 list 中与 value 匹配的元素位置索引。 mode 一般为-exact、 -glob 和- regexp.默认为-glob。找不到返回-1。
lsort ?switches? list 根据 开关选项对列表进行排序
concat list1 list2 ... 连接多个列表内容成一个列表
join list joinChars 以 joinChars 为分隔符将列表中的元素合并在一起
split string splitChars 以 splitChars 中的字符作为分隔符将字符串分解为列表元素。
foreach var list {proc body} 遍历列表各项,逐次将各元素值存入 var 中并执行proc body。相当于一个循环控制语句。

2.  list 命令 

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

使用 list 命令创建列表示例:

  • set l1 [list Sun Mon Tues]

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

  • set l2 [list $l1 Wed]

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

  • set str1 "Sun Mon Wed"

    •  => Sun Mon Tues

  • set l2 [list $str1 Wed]

    •  => {Sun Mon Tues} Wed     #和上面的命令相同,列表是特殊的字符串

  • set l1 [list "Sun Mon Tues" "Wed"]

    •  => {Sun Mon Tues} Wed    #当元素是一个字符时,就被花括号括起来了

  • 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

3. concat 命令 

concat 命令以空格为分隔符将多个列表拼装在一起形成新的列表。它和双引号的作用比较相似。

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

  • set x {1 2}       #花括号创建一个列表

    •  => 12

  • set y "$x 3"    #$x被替换后,作为列表结构的花括号被去掉

    •  => 1 2 3

  • set y "$x {3}"

    •  => 1 2 {3}

  • set y [concat $x 3]    #结构同“”的作用一样

    •  => 1 2 3

  • set y [concat $x {3}]

    •  => 1 2 3

  • set y [list $x 3]

    •  => {1 2} 3

  • set y [list $x {3}]

    •  => {1 2} 3

  • set y [lappend x 3]

    •  => {1 2} 3

4. lappend 命令 

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

lappend 命令简单例子:

  • lappend new 1 2    #lappend命令也可以用来创建一个列表

    •  => 1 2

  • lappend new {3 4} "5" {6} 7    #单个元素的双引号和花括号被剥离了

    •  => 1 2 {3 4} 5 6 7

  • set new

    •  => 1 2 {3 4} 5 6 7

5. llength 命令 

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

llength 命令的一个简单例子:

  • set l1 "1 2 3 4 5"

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

  • set num [llength $l1]     #这里l1被看成列表了

    •  => 5

列表是用空格搁开的多个元素组成的字符串,而通过 list 相关命令得到了特殊解释。既然 list是字符串,那么所有适用于字符串的操作命令也应该适用于列表。 

6. lindex 命令 

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

lindex 命令的一个简单例子:

  • set x {1 4 5}

    •  => 1 4 5

  • lindex $x 1

    •  => 4

  • lindex $x end

    •  => 5

  • lindex $x end-1

    •  => 4

  • lindex $x first

    •   => bad index "first" :  must be interer or end

7. lrange 命令 

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

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

    •  => 3 {4 5 } 6

8. linsert 和 lreplace 命令 

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

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

  • set x {1 2}

    •  => 1 2

  • set new [linsert $x 0 he she]

    •  => he she 1 2

  • set new [linsert $x end he she]

    •  => 1 2 he she

  • set new [linsert $x 1 he she]

    •  => 1 he she 2

  • puts $x

    •  => 1 2

  • puts $new

    •  => 1 he she 2

  • set y [lreplace $ new 1 2 B C]

    •  => 1 B C 2

  • set y [lreplace $ new 0 0]

    •  => he she 2

  • puts $ new

    •  => 1 he she 2

  • set y [lreplace $new 1 2]

    •  => 1 2

 

标签:set,元素,list,列表,命令,Tcl,new,操作
From: https://www.cnblogs.com/love-9/p/18133062

相关文章

  • C++ 键盘操作
    1.单方移动#include<iostream>#include<windows.h>#include<conio.h>usingnamespacestd;intmain(){HANDLEhandle=GetStdHandle(STD_OUTPUT_HANDLE);COORDcoord={0,0};SetConsoleCursorPosition(handle,coord);cout<&l......
  • 控制台操作
    #include<bits/stdc++.h>#include<windows.h>#include<conio.h>//控制台输入输出文件usingnamespacestd;intmain(){HANDLEhandle=GetStdHandle(STD_OUTPUTHANDLE);//获取标准输出的句柄COORDcoord={0,0};//保存光标坐标SetConsoleCursorPosit......
  • 11、操作系统安全加固-Windows 加固
    1.账号管理与认证授权1.1.按用户类型分配账号目的:根据系统要求,设定不同账户和组,管理员、数据库sa、审计用户、来宾用户等实施方法:打开本地用户和计算机管理器或 打开运行,输入lusrmgr.msc右击账户->属性->更改隶属于右击功能组->属性->成员1.2.清理......
  • 10、操作系统安全加固-Linux加固
    1.账号管理与认证授权1.1.为不同的管理员分配不同的账号目的:根据不同用途设置不同账户账号,提高安全层级实施方法:1.设置高风险文件为最小权限,如:passwd、shadow、group、securetty、services、grub.conf等2.使用sudo命令设置命令执行权限和禁止敏感操作权限3.检查其他权限过......
  • 基于codesys的看门狗操作
    循环任务CODESYS支持多种任务类型,其中最为常见的任务类型是循环任务,循环任务是指任务函数被每隔一段时间调用一次,而且任务应该在任务间隔时间内执行完。但是如果任务没有在规定的时间内执行完怎么办呢?看门狗对于只有打工命的工控技术来说,是永远没有躺平一说,于是“祭出”看门狗......
  • Blender快捷操作
    Blender快捷操作快捷键最大化显示窗口​Ctrl+space(空格键)​注意:macos与默认切换输入法快捷键冲突,如果需要保留blender快捷键的话,可以在系统-键盘-快捷键-输入法​中关闭系统快捷键,关闭之后使用CapsLK(切换大小写键)​键切换输入法。四视图​Ctrl+Alt+Q​​​​​......
  • uniapp实现虚拟列表(元素固定高度)
    一、应用场景当接口返回数据太多时,前端可使用虚拟列表,实现长列表。二、原理只有在屏幕部分元素被显示出来,并且被更新,始终只有固定数量的节点,不会卡顿。三、效果图四、思路步骤使用Object.freeze冻结对象,极大优化性能生成多个元素的options,或者动态获取根据onPag......
  • selenium之定位方式和元素操作
    selenium之定位方式和元素操作八大定位方式导包:fromselenium.webdriver.common.byimportBy1、标签id属性的定位ele=driver.find_element(by=By.ID,value="search-input")2、标签name属性的定位ele=driver.find_element(by="name",value="search-input")3......
  • C++,文件,文件夹操作,创建、删除、检测
     推荐 filesystem,特别好用,除了新建、删除、复制、移动文件夹,还支持磁盘空间检测,权限检测,路径处理。 一、使用系统库//检测文件,检测文件夹/*windows*头文件:io.h*函数:intaccess(constchar*_Filename,int_AccessMode);**_AccessMode参数说明:00表示只判断......
  • LTE网优多频网互操作参数汇聚(中兴)
    欢迎不吝资助和交流--coding:utf-8--importosimportopenpyxlimporttimedefmeasGroup(g):measGrou={}forlineinrange(6,ws.max_row+1):c_value=ws.cell(row=line,column=2).valued_value=ws.cell(row=line,column=3).valuee_value=ws.cell(row=......