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 個元素刪除 
View Code

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
             

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM