列表是Tcl数据结构之一,是一个有序的集合。同一列表中可以包括不同类型的项。列表支持嵌套,可以在列表中包含另一个列表。
创建
列表的创建有如下三种方式:
set listName {item1 item2 .. itemN }
set listName [list item1 item2 ... itemN]
set listName [split "items string" split_characters]
第一种方式是直接定义,列表项之间用空格分隔,包含空格的列表项用双引号包围起来。但是要注意的是由于列表项是被“{}”包围的,所以不会进行变量扩展,表达式扩展及字符转义。
第二种方式通过list命令定义,支持变量的扩展、表达式扩展及字符转义。
第三种方式是通过split命令定义,将字符串按指定的分隔符分隔。使用此方式要注意的是列表项中不能包含分隔符,否则会导致分隔结果与期望不符。split_characters可以定义多个字符,每个字符都会做为分隔符。
输出
通过puts命令可以输出列表内容。
长度
通过llength命令可输出列表长度。
追加元素
列表追加元素有如下两种方式:
append listName value1 value2 ...valueN
lappend listName value
索引元素
通过lindex命令可以获取列表中指定索引处的元素。列表索引从0开始递增。
lindex listname index
插入元素
通过linsert命令可以在列表指定索引处插入新的元素,可以同时插入多个元素。要注意的是linsert指定后会返回新的列表,而不是在原有的列表。
linsert listname index value1 value2..valueN
替换元素
元素替换有两种方式:
一是通过lreplace命令替换列表中指定索引处的元素。索引范围中索引的数量与value的数量可以不同。与linsert相同,lreplace也是返回新的列表,而不是原列表。
lreplace listname firstindex lastindex value1 value2...valueN
二是通过lset命令替换列表中指定索引处的元素。 与lreplace不同的是,lset是在原列表上替换,不生成新的列表。
lset listname index value
删除元素
列表元素的删除,同样是使用lreplace命令,与替换不同的是,只提供起始和结束索引,不提供新值。同样是返回新的列表。