TCL 中的數組和其他高級語言的數組有些不同:Tcl 數組元素的索引,或稱鍵值,可以是任意的字符串,而且其本身沒有所謂多維數組的概念。數組的存取速度要比列表有優勢,數組在內部使用散列表來存儲,每個元素存取開銷幾乎相同,而列表的存取數據花非時間與其長度成正比。
1.
元素使用 set 命令來定義和賦值:
[語法]:set arrName(index) value
也可以用 array 命令來定義一個數組:
[語法]:array set arrName { index1 value1 index2 value2 ...}
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
2.多維數組
在有些時候,可能需要象 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
1. 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