前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tcl: 修改列表(2)

Tcl: 修改列表(2)

作者头像
Lauren的FPGA
发布2019-10-30 22:11:09
1.9K0
发布2019-10-30 22:11:09
举报
文章被收录于专栏:Lauren的FPGALauren的FPGALauren的FPGA

lreplace

修改列表的一种常见操作是替换列表中指定元素的值,尽管这种操作可由lreplace完成,但其效率较低。这是因为lreplace首先需要将指定索引的旧值用新值替换,其次对于未改变的旧值要原封不动地复制,最后将所有元素赋给存有列表的变量。如下图所示。

lset

lreplace的操作方式对于大列表而言,效率会明显下降。好在Tcl提供了另一个命令lset。lset接收三个值,分别是列表变量名,替换索引和替换值。仍以上图所示替换为例,通过lset完成如下图所示。

可以看到,与lreplace最大的不同在于lset直接接收列表变量名(不存在$符号的变量置换),是对列表变量“原地”修改,不存在对未替换元素进行赋值的操作,这是其快速简练的主要原因。

类似地,使用lset时,对于嵌套的列表,索引也是可以嵌套的,如下图所示。另外,lset只能修改已存在的列表,而不能创建新列表。

同时,lset所允许的列表索引的最大值为end+1,也就是列表的长度,一旦超出此值就会显示“list index out of range”,如下图所示。

lappend

lappend命令可以认为是对列表的一种“续尾”操作,简言之,就是添加的新元素始终被放置在列表的最后一个位置上。lappend与lset一样,直接接收列表变量名,这意味着是对列表的“原地”操作。lappend接收的第一个参数是存放列表的变量名,从第二个参数开始为新添加的元素,新添加的元素可以是1个,也可以是多个。所以,lappend可以接收任意多个参数,且只把第一个参数做为列表变量名。如下图所示。

append与lappend使用方式类似,但操作对象不同。append用于字符串的拼接,具体查看往期文章。如果将append用于列表,尽管不会报错,但结果不是期望的,如下图所示。

结论

-lreplace和lset都可以完成列表元素的替换,不同之处在于后者是“原地“操作,效率更高

-lappend可以完成对列表的“续尾“操作,也是”原地“操作。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lauren的FPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档