TCL語言筆記:TCL中的數組


一、介紹

Tcl 中的數組和其他高級語言的數組有些不同:Tcl 數組元素的索引,或稱鍵值,可以是任意的字符串,而且其本身沒有所謂多維數組的概念。數組的存取速度要比列表有優勢,數組在內部使用散列表來存儲,每個元素存取開銷幾乎相同,而列表的存取數據花非時間與其長度成正比。

二、數組的定義與格式

數組索引是由圓括號()來指定的,每個數組元素變量名的格式是“數組名(索引值)”。數組

元素使用 set 命令來定義和賦值:

[語法]set  arrName(index) value

也可以用 array 命令來定義一個數組:

[語法]array set arrName { index1 value1 index2 value2 ...

 

這個命令在定義數組的同時可以定義其元素和元素值。需要注意元素索引(index-n)與元素值(valun-n)要成對輸入,否則會出錯。用命令 array set arrName “”可以定義一個空數組。用普通變量值的獲取方法——替換操作來獲取數組元素值:

 

[語法]set val  $arrName(index)

 

數組元素索引也支持替換操作,包括變量和命令替換,如:

 

[語法] set val $arrName($index)          

              set val $arrName([expr $index + 1])

Tcl 數組索引的值不象其他高級語言如 C 語言那樣,要求一定是整數。Tcl 允許索引值為包括數字字符在內的所有合法字符組成的字符串。

 

array set arr1 ""              ;#定義了一個空數組 
set array01(5) "Hello World" 
結果=> Hello World 

puts $array01(5) 
結果=>Hello World 

set array01(Hello) World 
結果=> World 

puts $array01(Hello)  
結果=> World 

array names array01    ;#array names 命令顯示數組元素名 
結果=> Hello 5 

array set arr2 {1 a 2 b 3 c 4 d} 
array names arr2 
結果=> 4 1 2 3 

parray arr2                    ;# 輸出數組全部內容 
結果=>  
arr2(1) = a 
arr2(2) = b 
arr2(3) = c 
arr2(4) = d 

 

三、多維數組

在有些時候,可能需要象 C 語言這樣:

int arr[2][2]

arr[0][0] = 100

來定義一個多維數組來處理數據。Tcl 並沒有直接支持這種數組的格式,使用者自己可以定

義所謂的多維數組,如:

set arr(0,0) 100

set arr(0,1) 200

parray arr

結果=> arr(0,0) = 100
      arr(0,1) = 200

 

由於 Tcl 數組索引的靈活性,使用時要小心,否則可能得不到預期的結果,如忘記了上面索

引的逗號,就成了:

set arr(00) 100

parray arr

結果=> arr(0,0) = 100

arr(0,1) = 200

四、數組操作指令

命令格式

說明

array exists  arr

判斷 arr 是否為數組變量,是返回 1

array get arr  ?pattern?

返回一個包含交替出現索引、元素值的列表。pattern 選擇匹配索引。如果不指定 pattern,返回所有的元素索引和值。

array names  arr ?pattern?

返回索引

array  set  arr list

初始化數組

array  size  arr

數組大小

array  startsearch  arr

返回用於 arr 進行搜索的搜索標記

array  nextelement arr index

返回下一個元素值,如果已在尾部的話,返回空串

array donesearch arr index

結束有 index 標識的搜索

parray arr

打印出 arr 的所有元素變量名和元素值

 1.array get 命令

 

array get 命令提取數組索引、元素值對並將這些值對組織成一個列表。而 array  set 命令 則將一個列表(數據要成對)轉換成一個數組。例

array set arr [list a AAA b BBB c CCC d DDD] 
array size arr                  ;#數組元素個數 
結果=> 4 

parray  arr 
結果=>  arr(a) = AAA arr(b) = BBB arr(c) = CCC arr(d) = DDD 

set l1 [array get arr] 
結果=> d DDD a AAA b BBB c CCC 

2.array names命令

array names 返回所有元素索引名與模式 pattern 匹配的元素索引名列表。模式 pattern string match 的模式格式相同。如果 pattern 沒有指定,則返回所有數組元素索引名列表。

array set a [list  "School,BUPT" "BUPT" "School,NJU" "NJU" "School,NJUA" "NJUA"] % parray a 
結果=> a(School,BUPT) = BUPT a(School,NJU)  = NJU a(School,NJUA) = NJUA 

array names a "School,*" 
結果=>School,NJU School,NJUA School,BUPT 

array names a "School,N*" 
結果=>School,NJU School,NJUA 

array names a 
結果=>School,NJU School,NJUA School,BUPT 

 

 

 

 

 

array names 命令


免責聲明!

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



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