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:删除列表中的元素;替换指定位置的元素