码迷,mamicode.com
首页 > 其他好文 > 详细

Tcl学习之--列表|字典

时间:2015-07-11 22:55:02      阅读:2681      评论:0      收藏:0      [点我收藏+]

标签:tcl

列表|字典

Tcl使用列表来处理各种集合,比如一个文件夹中的所有文件,以及一个组件的所有选项。最简单的列表就是包含由任意个空格、制表符、换行符、分隔的任意多个元素的字符串。比如:

JerryAlice Mandy David

lindex命令: --> 获取元素

至少需要两个参数,一个列表和一个索引值,返回取得的元素

技术分享

如果列表中包含列表的话,访问子列表中的元素就要多个参数

技术分享

llength命令: --> 获取长度

技术分享

列表命令中可以把一个含有空白符的元素括在括号中,还可以使用反斜线来给出特殊字符,如括号等。

技术分享

list命令: --> 加入列表

Tcl提供了三个把字符串联合为列表的命令:list、concat 和lrepeat,每个命令可以接受无数个参数,返回一个列表,list总是会产生一个适当的列表结构,无论参数结果如何.

技术分享

concat命令: --> 合并列表

concat需要它的参数有适当的列表结构,如果某个参数不是形式完整的列表,那么这个命令给出的结果也可能不具备完整的列表形式。

concat做的工作就是:把参数字符串的开头和结尾的空白裁掉,然后把各个元素以空格隔开,串接起来形成一个大的列表。Concat完成的任务可以用[]来完成。看下面例子:

技术分享

lrepeat命令: --> 重复元素来创建列表

技术分享

lrange命令: --> 取范围

技术分享

Note:既然是范围,就必须提供开始和结尾两个参数

linsert命令:-->插入元素

linsert需要至少三个参数:

第一个参数: 是一个列表

第二个参数: 第一个元素索引值

第三个参数: 要插入的元素

技术分享

lreplace命令:--> 删除元素

需要至少三个元素。

第一个参数: 是一个列表

第二个参数: 要删部分元素的开头

第三个参数: 要删部分元素的结尾

如果只给定了三个元素,则是删除指定部位:

技术分享

如果给定了更多元素,则是取代:

技术分享

lreplace常用操作: 更新列表中某个元素

技术分享

NOTE:lreplace并不是直接修改变量的值,需要执行一次命令替换来执行它,然后把返回的结果赋给有列表的变量作为它的新值,创建新列表。

l  lset命令: -->更新元素

技术分享

快速简练地修改元素的值。

lappend命令: -->添加元素

高效的添加元素的方法。获取存放列表的变量名作为参数,以及任意多个其他参数,返回该列表变量的新值

技术分享

lappend和append区别及联系:

区别: 前者是基于列表的添加,后者是基于字符串的添加。前者可以强制生成适当的列表结构。

联系:1.因为都是涉及到尾部添加,两者效率都挺高,与append相比,lappend效率更高。2. 原来的变量都会改变。3. 都是以原来的变量名为添加对象。

技术分享

可以用concat 和 list命令达到

技术分享

lassign命令:-->取得元素

该命令是将列表中的值分发到一个或多个变量中.

1) 第一个参数为列表:

2) 第二个及N个参数为变量名.

a)  如果变量名比列表中的元素个数多,多余的变量会被设置为空字符.

b)  如果列表中的元素比变量的个数多,则会返回一个未分发的元素组成组成的列表

技术分享

该命令两个比较有用的操作:

1. 模仿某些语言的shift,在Python中是pop, push

set argv [lassign $argvnextArg]

2. 利用foreach命令来将列表中的元素分发给独立变量.

技术分享

lsearch命令:--> 查找元素

该命令从列表中查找指定的元素,它获得两个参数。

第一个参数: 列表

第二个参数: 模式

搜索到返回指定的索引值,非负数。未搜索到返回:-1

技术分享

常用参数前标志:

-exec:进行严格匹配

-glob:指定匹配按照stringmatch命令的规则进行

-regexp:进行正则表达式匹配

-inline:指定返回元素,而非元素的索引

-not:对匹配的结果取反

-all:将所有匹配的元素组成一个列表返回

技术分享

lsort命令:-->排序

排序命令,可以在列表前添加选项来控制排序

-decreasing:最大数排在前面

-integer:列表中的元素被视为整数进行排序

-real:列表中的元素被视为实数来进行排序

-unique:返回的结果中,重复的只出现一次

-index:  允许指定子列表中元素的索引

-dictionary:指定不区分大小写的排序,并且元素中嵌入的数字作为非负整数处理

技术分享

另外: 如果列表中包含了不能进行字词排序或数学排序的数据,可以使用-command命令选项定义自己的排序函数.

split和join命令:-->分隔、合并

split命令:将字符串分成几部分,然后可以对各个部分独立进行处理并创建一个列表。它需要两个参数:

第一个参数: 待分隔的字符串

第二个参数: 一个多个分隔字符

技术分享

多个字符分隔:

技术分享

如果指定分隔字符是空字符串,会将字符串接成一个字符串,元素之间用指定的分割符隔开.

技术分享

join命令 :是split命令的逆操作,把列表连成一个字符串,元素之间用指定的分隔符隔开。

技术分享

 

字典结构与dict get命令:

字典是按照键、值来创建及维护的。看上去像元素的列表,实则不然。Hash的方式存储,按键查找值,其代码复杂度O(1),不同于数组,字典可以可靠的按一定顺序来遍历,或作为一个值传给其他命令(NOTE:非全局数组需要用upvar或明确进行打包和解包).

类似于一个偶数的列表,1.3.5..为键,2.4.6..为值

Firstname JohnSecondname SmithTitle Mr

技术分享

嵌套字典的定义及遍历

技术分享

l  dict create命令: -->创建字典

技术分享

dict remove命令: --> 删除键值

技术分享

dict merge命令: --> 合并字典

技术分享

dict set和dict unset命令: -->更改字典

技术分享

dict size命令: -->元素个数

技术分享

dict exists命令: --> 存在判断

技术分享

dict keys命令: --> 获取关键字列表(按顺序)

技术分享

dict values命令: -->获取关联子列表(按顺序)

技术分享

 

例一: 整齐打印一个字典中的内容;

技术分享

输出结果:

技术分享

版权声明:本文为博主原创文章,未经博主允许不得转载。

Tcl学习之--列表|字典

标签:tcl

原文地址:http://blog.csdn.net/jerry_1126/article/details/46844621

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!