Tcl中的List相当于其他语言里的数组。Tcl里的Array 则实际上是一种map结构。
set list_a [list a b c d e] # 用list命令来创建一个List set list_a "a b c d e" # 空白字符分割的字符串也可以用作List set list_a {a b c d e} # 同上,只是分组用大括号而不是双引号 set list_b [list a b {c d} e] # 有时候List的元素本身中就有空白字符的 set list_b {a b {c d} e} # 同上 set list_c [split "a,b,c,d,e" ","] # 很多时候需要把字符串分割为List set s [join $list_c ","] # 或者把List组合成一个字符串
Tcl中的List可以用list
命令来创建,也可以通过空白字符分隔的字符串来描述。
而实际上,当使用字符串的形式来描述时,变量的初始内部表示是字符串,只是在需要用作list的时候被转换为了真正的List结构。
这是由于Tcl语言本质上是一种基于字符串的语言。
Tcl中的List的下标从0开始。
set v [list a b c d e f] lindex $v 0 ; # 第一个元素 lindex $v end ; # 最后一个元素 llength $v ; # List的长度 lsort -asicc $v ; # List排序(按字典升序顺序) lsort -integer -decreasing $v ; # 按数值降序排序 lsort -unique $v ; # 排序并去除重复项 lsearch -exact $v c ; # 在List中查找元素(完全匹配) lsearch -glob $v c* ; # 用通配符匹配查找 lsearch -regexp $v c.* ; # 用正则表达式匹配查找 lsearch -all c* ; # 查找所有匹配的元算
foreach i [list a b c d] { puts $i } #------------------------------------------------ # 同时遍历两个List。循环次数等于最长的List的长度。 # 某个List的长度不够时,对应的变量值为空 foreach i [list a b c d e f g] j [list 1 2 3 4] { puts "$i - $j" } #------------------------------------------------ # 每次取用List中的多个元素 foreach {i j} [list a b c d e f] { puts "$i $j" } # 用作变量赋值,类似于perl或php里面的list命令 foreach {llx lly urx ury} [list 10.0 11.0 30.0 33.0] break puts "$llx $lly $urx $ury"