2022年的 Tcl 編程語言入門參考 4.數(shù)組、列表、字典
數(shù)據(jù)集合的特點(diǎn):可以添加、刪除、修改元素可以查詢/統(tǒng)計(jì)元素可以對(duì)元素進(jìn)行遍歷操作
數(shù)據(jù)集合的作用,就相當(dāng)于變量的Excel表格,還可以擴(kuò)展出一些魔法操作(比如早先Python用字典實(shí)現(xiàn)switch功能)
數(shù)組
TCL語言的數(shù)組是變量的無序集合,無序指的是數(shù)組里的變量沒有順序。使用數(shù)組的時(shí)候,就由數(shù)組的名字加上元素的名字來指定具體是哪個(gè)變量。
用set命令創(chuàng)建/設(shè)置數(shù)組,用法跟變量一樣。如果數(shù)組不存在,就會(huì)自動(dòng)創(chuàng)建數(shù)組;元素不存在就會(huì)自動(dòng)創(chuàng)建元素。
模擬多維數(shù)組
Tcl語言本身不支持多維數(shù)組(元素本身也是數(shù)組)。但因?yàn)橐磺卸际亲址钥梢阅M出多維數(shù)組的效果
數(shù)組專用的array命令,有很多功能(一堆預(yù)設(shè)參數(shù))
數(shù)組遍歷是通過一系列命令實(shí)現(xiàn)的(還需要配合條件判斷或邏輯循環(huán)命令,比如if、for、while等等):
array startsearch 返回一個(gè)本次遍歷行為的代號(hào)
array nextelement 列出當(dāng)前遍歷進(jìn)度的元素名稱,沒有時(shí)返回空字符(即當(dāng)前遍歷進(jìn)度已經(jīng)到達(dá)數(shù)組末尾)
array anymore 如果遍歷進(jìn)度后面還有元素就返回1,否則返回0
array donesearch 終止遍歷,并刪除"標(biāo)記"
可以對(duì)數(shù)組同時(shí)進(jìn)行多組遍歷,遍歷過程中對(duì)數(shù)組添加或刪除元素,則所有遍歷行為都將終止,等同于調(diào)用donesearch

列表
"嗶哩嗶哩 ?NASDAQ:BILI ?2022-04-08 ?27.02 ?27.66 ?25.66 ?25.71 ?11.72M"
列表是可以嵌套的,即元素本身也是列表,比如:
"{奇奇 ?恰恰 ?蹦蹦} ?啦啦"
列表有一系列命令:
list - 創(chuàng)建一個(gè)列表
lrepeat - 使用重復(fù)的元素創(chuàng)建列表
split - 將字符串分解成Tcl列表
concat - 將多個(gè)列表合并成一個(gè)列表
join - 把列表元素合并成一個(gè)字符串
lappend - 將元素添加到列表末尾
lassign - 將列表元素賦值給變量
lindex - 從列表中獲得元素
linsert - 以插入元素的形式生成新列表
llength - 計(jì)算列表的元素個(gè)數(shù)
lrange - 返回列表中的一個(gè)或者多個(gè)臨近的元素
lreplace - 在一個(gè)列表中使用新的元素替代其它元素
lreverse - 反轉(zhuǎn)列表元素的順序
lsearch - 在列表中尋找特定元素
lset - 修改列表元素
lsort - 給列表中的元素排序、去除重復(fù)元素
lmap - 遍歷列表并重新整合
按照Tcl近些年的發(fā)展思路,這些功能應(yīng)該都整合到list命令里面(就像chan命令那樣)。但畢竟用了這么多年了,尾大難掉頭。

Tcl的字典看上去跟偶數(shù)長(zhǎng)度的列表相同,也是一種有特殊格式規(guī)則的字符串。字典的元素名,也稱為關(guān)鍵字,英文是key。
dict命令用來操作字典,這個(gè)命令有一大堆預(yù)設(shè)參數(shù)(相當(dāng)于子命令)。
append
dict append 字典名 關(guān)鍵字 字符串
為元素追加字符串或把元素追加到字典后面。字符串有多個(gè)值時(shí),會(huì)拼接成一個(gè)字符串
exists
dict exists 字典 關(guān)鍵字 ?嵌套字典關(guān)鍵字?
檢驗(yàn)字典元素是否存在
過濾
以三種方式過濾出字典內(nèi)的鍵值對(duì)
dict filter 字典 key/value/script "規(guī)則"
for遍歷操作
?
map遍歷修改,返回新字典
incr增加元素值
update更新元素值
?
with命令
與update類似,自動(dòng)將元素名作為變量名引入最后的代碼段
?
其它簡(jiǎn)單子命令