TCL中用于修改列表的命令有五个:lrange、linsert、 lreplace、lset和 lappend。

lrange命令返回列表中某范围内的元素。它获取的参数包括一个列表和两个索引值,返回的是列表中这两个索引值相应的元素之间的所有元素组成的新列表(包括这两个索引值所对应的元素)。例如:

% lrange {a b c d e} 1 end-1

b c d

linsert命令把一个或多个元素插入已经存在的列表,从而形成新的列表,例如:

% set oldList {the fox jumps over the dog}

the fox jumps over the dog

% set midList [linsert $oldList 1 quick]

the quick fox jumps over the dog

% set newList [linsert $midList end-1 lazy]

the quick fox jumps over the lazy dog

linsert需要获取三个或更多个参数。第一个参数是一个列表,第二个参数是插入位置所对应的索引值,第三个以及其他参数是将要插入这个列表的新元素。 linsert的 返回值是一个列表。如果索引值大于或等于原列表的元素 个数,那么新元素会插入到列表的末尾。

lreplace命令从列表中删除元素,且可选地在它们的位置添加新的元素。它需要获取三个或更多个参数。第一个参数是一个列表,第二个和第三个参数给出了要删除的那部分元素的开头元素和结尾元素分别对应的索引值。如果只给定了三个参数,那么从原列表中删除指定部分元素,得到的新列表。如果 lreplace指定了更多的参数,这些参数会插入到被删除的元素的位置。例如:% lreplace {a b c d e} 1 1 fooa foo c d e% lreplace {a b c d e} 1 2 three more elementsa three more elements d e% set var {a b c d e} a b c d e % set var [lreplace $var end end]a b c d

TCL并没有单独的明确命令用于从列表中删除元素,如果 lreplace命令不指定用于替换的元素,就起到了删除列表中元素的功能。

有一个常见的操作是在列表的某个元素的值变化后更新存放在变量中的列表。过去 lreplace常用于这个目的,例如

set person {{Jane Doe} 30 female}

set person [lreplace $person 1 1 31]

{Jane Doe} 31 fema1e

lreplace并不是直接修改变量的值,需要进行一次命令替换来执行它,然后把返回的结果赋给存有列表的变量作为它的新值。这不仅写起来麻烦,而且缺乏效率,因为lreplace在创建新列表的时候必须复制原列表中的元素。如果经常需要更新一个大列表中的元素,效率会受明显影响。

当列表存放在一个变量中时,lset命令是一种快速简练地修改元素值的方法。它获取 变量名,列表中已经存在的一个元素对应的索引(或者一系列索引从而指向某个子列表 的元素)以及赋给这个元素的新值。lset返回变量的新值,例如:

% set person {{Jane Doe} 30 female}

{Jane Doe} 30 female

% lset person 1 32

{Jane Doe} 32 female

% lset person {0 1} Johson

{Jane Johson} 32 female

% lset person 0 0 Janice

{Janice Johson} 32 female

注意:不能用lset命今创建新的列表,它只能修改已经存在的列表.如果给定的索引指

向不存在的元素,lset会返回一个错误。

lappend命令提供了一种高效率的方法,把新的元素添加到存放在一个变量中的列表

里。它要获取一个存放列表的变量名作为参数,以及任意多个其他参数,这些参数作为元素添加到第一个参数指明的那个列表中,返回该列表变量的新值。例如:% set var 11% lappend var 21 2% lappend var 3 4 51 2 3 4 5

lappend与append相似,只不过它会强制生成适当的列表结构。而append并不这样 做。例如,命令

lappend x $a $b $c

可以改写为

set x [concat $x [list $a $b $c]]

然而,与 append相比, lappend的运行效率更高。对于大的列表,可能会有显著的效率差异。

提示: lappend和lset与其他像lreplace这样的列表命令不同,它们所接受的是存放列表的变量,而不是直接接受列表,因此需要用存放列表的变量名为它们指明要处理的

列表。

lrange是取出所有值并移除么_TCL中的列表修改命令lrange、linsert、lreplace、lset和 lappend | 坐倚北风...相关推荐

  1. lrange是取出所有值并移除么_图解双指针 | LeetCode 27. 移除元素

    题目描述 原题链接:LeetCode 27. 移除元素 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 ...

  2. lrange是取出所有值并移除么_美欧日站点亚马逊物流库存绩效指标分数达标值将降低为 450...

    原标题:美欧日站点亚马逊物流库存绩效指标分数达标值将降低为 450 今天,亚马逊宣布将美国.欧洲.日本站点的[库存绩效指标 (IPI) 分数达标值降低至450]. 各位卖家要注意了!如果你的库存绩效指 ...

  3. lrange是取出所有值并移除么_部落冲突:兵营容量提升,移除超级部队、英雄防御状态冷却时间...

    爱生活,爱游戏,大家好,我是阿呆! 部落冲突已经好长时间没更新了,这次秋天不再等待,部落冲突第二弹更新来袭,被称之为今年最赞的一次更新,感觉和我一起来看看吧! 防御建筑升级 本次防御建筑升级主要针对1 ...

  4. 修改list中对象的值_怎样在S7-200 SMART中监控和修改变量的值?

    我们知道在S7-300 PLC编程调试的时候,可以通过在Step7的变量表中监视和修改变量.那么在S7-200 SMART编程调试的时候,如果我们希望监控某个变量的值或者对其进行修改,应如何做呢?今天 ...

  5. R语言ggplot2可视化移除数据中的NA值再可视化实战:消除图形中非常突出的NA柱状图、使用subset函数、使用drop_na函数

    R语言ggplot2可视化移除数据中的NA值再可视化实战:消除图形中非常突出的NA柱状图.使用subset函数.使用drop_na函数 目录

  6. session监听器统计在线人数存入数值后不能取出其值

    session监听器统计在线人数存入数值后不能取出其值 首先这是一个在线统计人数的需求,给大家看看我的代码 监听器的类: import javax.servlet.annotation.WebList ...

  7. php某列为键数组为值,PHP 将二维数组中某列值作为数组的键名 -- 超实用

    有时候,想通过数组的中某字段值, 然后再在二维数组中获取存在该字段值的数组: 一般能想到的就是foreach 遍历比较一下跟该字段值一样,就获取到想要的数组,如下: //测试二维数组 $arr =ar ...

  8. 电容的q值计算公式_在设计电路中电容容量大小、耐压等级选取详解 (转)

    原文链接:在设计电路中电容容量大小.耐压等级选取详解 作者:张飞 电容的计算 我们对电容的计算,目的是要知道,我们在电路中需要一个多大的电容.为什么要需要 这么个电容?它的电压要多高?它的容量要多大? ...

  9. mysql8.0 服务移除_MySQL8.0中已移除的特性,功能

    1. 说明 本文所说的都是已经从MySQL8.0中删除的特性,如果是从低版本升级到8.0的应用,如果使用到了这些特性应该注意避免使用这些特性或找到替代的特性.如:对于MySQL5.7和8.0的主从环境 ...

最新文章

  1. [Mac] mac linux 多线程下载利器 axel
  2. C++继承中构造函数、析构函数调用顺序及虚析构函数
  3. 详解Python中的循环的几个类型
  4. 【PHPWord】列表ListItem
  5. 《团队开发一(求一个数组的连续的子数组之和的最大值)》
  6. 【小白学习tensorflow教程】一、tensorflow基本操作、快速构建线性回归和分类模型
  7. realmeq参数配置详情_realmeq2i参数_realmeq2i参数配置详情
  8. QQ卡机问题解决方法
  9. 指定开始_Flink-Kafka指定offset的五种方式
  10. 力扣53.最大子序和 多种方法
  11. mysql不能访问order,使用ORDER BY时,MySQL不使用索引(“Using filesort”)
  12. 软件测试---弹出窗口
  13. MySQL 58到家数据库30条军规解读
  14. python 基础 7.1 datetime 获得时间
  15. 作为一个程序猿你必须会的技能----自学框架!
  16. 给工具箱中的控件添加图标
  17. 分享几个影视采集网站
  18. 小刚的Android研究笔记~在未开启USB调试的Android手机绕过锁屏密码
  19. 文墨绘学:教育培训微信营销方案
  20. 第105章 SQL函数 %OID

热门文章

  1. 基于FreeRTOS与MQTT的物联网技术应用系列——步进电机控制(五)MQTT的移植和步进电机控制的实现
  2. 2020 Java工程师面试题汇总
  3. lisp算零碎面积总和_Common Lisp:符号计算简单介绍(第十二章)
  4. 微信小程序动态绑定class
  5. [Linux] xxx/rhel7/repodata/repomd.xml: [Errno 14] FTP Error 550 - Server denied you to XXX
  6. 行动瑜伽:何谓不执的行动
  7. 线程安全的集合类有哪些?
  8. wsus服务器无响应,WSUS的MMC无法连接服务器
  9. java设置job时间 例:每小时一次
  10. Internet Explorer已停止工作的解决方法