Tcl系列文章:修改列表(1)
- 2019 年 10 月 30 日
- 筆記
上期內容:Vivado下不可不知的快捷鍵
很多情況下需要對原有列表進行修改,這種修改通常包括:獲取指定範圍內的元素形成子列表;插入新的元素形成新列表;刪除列表中的元素;替換列表中的元素;修改指定索引的列表元素等,對此,Tcl都提供了相應的命令。
lrange
功能:獲取指定範圍內的元素形成子列表
lrange需要三個參數:列表、第一個索引值和第二個索引值。索引值可以包含end,且第二個索引值大於第一個索引值,如下圖所示。

如果第二個索引值小於第一個索引值,則返回空列表。這在程序調試時非常有幫助,如果發現列表為空,需要檢查一下是否索引值的順序顛倒。

linsert
功能:插入新的元素形成新的列表
linsert需要至少三個參數。其中第一個參數是原始列表,第二個參數是新元素在新列表中的索引,第三個及後續參數為插入值。如下圖所示,索引為0,表明新插入的元素位於新列表的0號位置;若為1,則在1號位置;若為end則在末位。同時可以看到,linsert返回一個新的列表,並不會改變原始列表,所以puts $type的輸出保持不變。

當參數多於3個時,第三個參數到最後一個參數均被視為插入值。同時,若索引值大於列表最大索引值,則將元素添加到列表末尾。

lreplace
功能:刪除列表中的元素;替換指定位置的元素
lreplace可以接收三個或三個以上的參數。當只有三個參數時,第一個參數是列表,第二個參數是初始元素索引,第三個參數為終止元素索引。此時lreplace可用於刪除索引所示範圍內的元素。另外,這兩個索引值可以相同。

如果lreplace接收多於三個元素時,第四個元素至最後一個元素為替換值。此時,如果兩個索引所能表示的索引區間長度與替換值個數相等,則完成索引一對一替換。如果索引區間長度大於替換值個數,除發生替換的同時還會發生刪除操作(可理解為被替換成空元素)。如果索引區間長度小於替換值個數,則會把多餘的替換值按索引順序插入列表中。

結論
–lrange:獲取指定範圍內的元素形成子列表
–linsert:插入新的元素形成新的列表
–lreplace:刪除列表中的元素;替換指定位置的元素