一、介紹
列表則是具有特殊解釋的字符串。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