• 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命令: --> 获取keyword列表(按顺序)

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

     

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

    输出结果:


  • 相关阅读:
    通过注册表找网站绝对路径
    西普学院Crypto之用户名和密码
    西普学院Crypto之一段奇怪的代码
    西普学院Crypto之先有鸡还是先有蛋
    西普学院Crypto之摩擦摩擦
    西普学院Crypto之凯撒是罗马共和国杰出的军事统帅
    各类文件的文件头标志[转]
    收藏的几个脑图
    同源策略详解及绕过[转]
    Python学习#1
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6888084.html
Copyright © 2020-2023  润新知