TCL语言笔记:TCL中的列表操作

一、介绍

列表则是具有特殊解释的字符串。Tcl 中的列表操作和其它 Tcl 命令一样具有相同的结构。列表可应用在诸如 foreach 这样的以列表为变元的循环命令中,也应于构建 eval 命令的延迟命令字符串。

二、TCL列表相关命令


命令


说明


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。相当于一个循环控制语句。

二、相关命令

1.list 命令

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

set l1 [list Sun Mon Tues]
结果=>Sun Mon Tues      

set l2 [list $l1 Wed]     ;#列表 l1 含有三个元素
结果=> {Sun Mon Tues} Wed 

set str1 "Sun Mon Tues"
结果=>Sun Mon Tues 

set l2 [list $str1 Wed]     ;#列表 l2 中含有两个元素。第一个元素用花括号括起来。
结果=>{Sun Mon Tues} Wed             ;#和上面的命令结果相同:“列表是特殊的字符串”。 

2.concat 命令

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

set x {1 2}
结果=> 1 2 

set y "$x 3 " ; #$x 被替换后,作为列表结构的花括号被去掉,
结果=> 1 2 3  ;    #元素被提出来和 3 一起作为新列表的元素 

set y "$x {3}"
结果=> 1 2 {3} 

set y [concat $x 3]       ;#结果同上面的双引号
结果=> 1 2 3 

set y [concat $x {3}]
结果=> 1 2 3 

3.lindex 命令

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

set x { 1 2 3 }
结果=> 1 2 3 

puts [lindex $x 1]
=>2 

4.llength 命令

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

set length "1 2 3 4 5"
结果=>1 2 3 4 5                             ;#定义了一个字符串
set num [llength $l1]          ;#这里 l1 被看作列表了
=>5 

5.lrange 命令

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

lrange {1 2 3 {4 5} 6} 2 end
结果=> 3 {4 5} 6 

6.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                       ;# x 的值没有改变 

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                  ;#new 的内容并没有改变,这和 string replace 相同。 

set y [lreplace $new 1 2]
结果=>1 2                           ;#将第 1、2 个元素删除 

7.lsearch 命令

lsearch 命令在给定列表中搜索与匹配字符串匹配的元素,成功就返回正确的元素索引,否则返回-1。lsearch 支持通配符格式,但可以使用-exact 选项将其屏蔽而进行精确匹配。

set l1 [list This  is one list]
结果=> This is one list 

set index [lsearch $l1 l*]
结果=> 3 

set index [lsearch -exact $l1 l*]
结果=>-1 

set index [lsearch -exact $l1 list]
结果=>3 

8.lsort 命令

lsort 命令实现对列表的排序。排序操作不影响原表,而是返回排序之后的新表。

set list "a Z z n100 n200 M p Hl hL m 1 20"
结果=>a Z z n100 n200 M p Hl hL m 1 20 

lsort -ascii $list
结果=>1 20 Hl M Z a hL m n100 n200 p z 

lsort -dictionary $list
结果=>1 20 a Hl hL M m n100 n200 p Z z 

9. join 与 split 命令

join 命令接收一个列表,并用指定的分隔符将列表元素整合成一个字符串

join {1 {2 3} {4 5 6}} :
结果=> 1:2 3:4 5 6 

split 命令的作用与 join 的作用相反,它接收一个字符串,并根据给定的字符将其分割转换成

一个列表。

set str cm8/auto/tools/aries/ASAM/NE/SNMP/IMPL/ne_create_board.tcl
结果=>cm8/auto/tools/aries/ASAM/NE/SNMP/IMPL/ne_create_board.tcl
set s /
结果=>/ 

set l1 [split $str $s]
结果=> cm8 auto tools aries ASAM NE SNMP IMPL ne_create_board.tcl 

set  l2 [split $str  "/."]    ;#可以指定多个分割符
结果=> cm8 auto tools aries ASAM NE SNMP IMPL ne_create_board tcl 

 10.foreach 控制结构

foreach 命令/控制结构会遍历整个列表,逐次取出列表的每个元素的值放到指定变量中,使用者可以在跟随的过程体中添加必要的处理过程。

set lst "1 2 3 4"
结果是=>1 2 3 4

foreach l1 $lst {
puts  $l1
}
结果是=>
1
2
3
4
             
时间: 2024-11-01 05:43:39

TCL语言笔记:TCL中的列表操作的相关文章

Python中的列表操作

Python的列表操作可谓是功能强大且方便(相对于Java)简单.常规的操作就不说了(这不是一个入门教程),介绍几个很有特点的例子 添加 # 追加到结尾(append) li = [1, 2, 3, 4, 5] li.append(6) print('li = %s' % li) # 输出:li = [1, 2, 3, 4, 5, 6] # 追加一个列表(extend) li2 = ['a', 'b', 'c', 'd', 'e'] li.extend(li2) print('li = %s'

【Python】Python中的列表操作

Python的列表操作可谓是功能强大且方便(相对于Java)简单.常规的操作就不说了(这不是一个入门教程),介绍几个很有特点的例子 添加 # 追加到结尾(append) li = [1, 2, 3, 4, 5] li.append(6) print('li = %s' % li) # 输出:li = [1, 2, 3, 4, 5, 6] # 追加一个列表(extend) li2 = ['a', 'b', 'c', 'd', 'e'] li.extend(li2) print('li = %s'

python学习笔记(二)列表操作

列表及列表操作: 列表是最常用的数据类型之一,列表也叫数组,列表定义,使用[]即可:列表里面可以再套列表,一个里面套一个列表,叫二维数组:一个里面套一个列表,里面的列表再套一个列表,这个叫三位数组,套几层就是几维,定义格式如下: 1 list1 = [1,2,3,4]#一个普通的数组 2 list2 = ['marry','lily',[50,'money']]#二维数组 3 list3 = ['name','sex',['lily',124,['aaaa','bbb']]]#三维数组 1 al

TCL语言笔记:TCL中的String命令

一.介绍 字符串是 Tcl 中的基本数据类型,所以有大量的字符串操作命令.一个比较重要的问题就是模式匹配,通过模式匹配将字符串与指定的模式(格式)相匹配来进行字符串的比较.搜索等操作. 二.string命令列表 命     令 说      明 string bytelength str 返回用于存储字符串的字节数. string compare ?-nocase? ?- length len? str1 str2 根据词典顺序比较字符串.-nocase 选项表示大小写无关.-length 选项

Tcl语言笔记之二

1,表达式 1.1 操作数 TCL表达式的操作数通常是整数或实数.整数一般是十进制的, 但如果整数的第一个字符是0(zero),那么TCL将把这个整数看作八进制的,如果前两个字符是0x则这个整数被看作是十六进制的. 1.2运算符  TCL语法形式和用法跟ANSI C中很相似 1.3 函数 TCL中支持的数学函数如下 abs( x) Absolute value of x. acos( x) Arc cosine of x, in the range 0 to p. asin( x) Arc si

TCL语言笔记:TCL练习

一.关于随机数的练习 1.随机生成一个最大值到最小值之间的整数 proc random {min max} { return [expr round(($max-$min)*rand()+$min)] } 2.生成num个min到max之间的不重复的随机整数 proc randomUnique {min max num} { array set arr {} #如果要求生成的数量超过max和min相减的个数+1 if {$num>[expr $max-$min+1]} { return "

TCL语言笔记:TCL过程控制练习

1.青蛙爬井 for {set day 1;set cur 7} {$cur<77} {incr cur 2 ;incr day } { } puts $day 2.求1加到100 proc getsum {min {max 100}} { set sum 0 for {set i $min} {$i<=$max} {incr i} { incr sum $i } return $sum } puts [getsum 1 ] 3.返回任意多个整数的平均值 proc getavg {args}

TCL语言笔记:TCL练习二

一.练习 1.二进制转十进制 proc b2d {b} { set sum 0;set len [string length $b] for {set i 0} {$i<$len} {incr i} { incr sum [expr int([string index $b $i]*pow(2,$len-$i-1))] } return $sum } 2.十进制转二进制 proc d2b {d} { set b "" while {$d!=0} { set b "[ex

R语言笔记 R中设置图形参数--函数par()详解

R有着非常强大的绘图功能,我们可以利用简单的几行代码绘制出各种图形来,但是有时候默认的图形设置没法满足我们的需要,甚至会碰到各种各样的小问题:如坐标轴或者标题出界了,或者图例说明的大小或者位置遮挡住了图形,甚至有时候默认的颜色也不能满足我们的需求.如何进行调整呢?这就用到了"强大"的函数par().我们可以通过设定函数par()的各个参数来调整我们的图形,这篇博文就是对函数par()的各个参数进行一下总结. 函数par()的使用格式如下: par(..., no.readonly =