列表则是具有特殊解释的字符串。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 个元素删除 
View Code

相关文章: