Tcl/Tk Insight: List

风行水上 @ 2009-06-20 10:03:25
标签:
    «目录»

    Tcl中的List相当于其他语言里的数组。Tcl里的Array 则实际上是一种map结构。

    List的创建

    set list_a [list a b c d e]   # 用list命令来创建一个List
    set list_a "a b c d e"        # 空白字符分割的字符串也可以用作List
    set list_a {a b c d e}        # 同上,只是分组用大括号而不是双引号
    set list_b [list a b {c d} e] # 有时候List的元素本身中就有空白字符的
    set list_b {a b {c d} e}      # 同上
    
    set list_c [split "a,b,c,d,e" ","] # 很多时候需要把字符串分割为List
    set s      [join $list_c ","]      # 或者把List组合成一个字符串
    

    Tcl中的List可以用list命令来创建,也可以通过空白字符分隔的字符串来描述。

    而实际上,当使用字符串的形式来描述时,变量的初始内部表示是字符串,只是在需要用作list的时候被转换为了真正的List结构。

    这是由于Tcl语言本质上是一种基于字符串的语言。

    List的常用操作

    Tcl中的List的下标从0开始。

    set v [list a b c d e f]
    
    lindex $v 0    ; # 第一个元素
    lindex $v end  ; # 最后一个元素
    
    llength $v     ; # List的长度
    
    lsort -asicc $v               ; # List排序(按字典升序顺序)
    lsort -integer -decreasing $v ; # 按数值降序排序
    lsort -unique $v              ; # 排序并去除重复项
    
    lsearch -exact $v c         ; # 在List中查找元素(完全匹配)
    lsearch -glob $v c*         ; # 用通配符匹配查找
    lsearch -regexp $v c.*      ; # 用正则表达式匹配查找
    lsearch -all c*             ; # 查找所有匹配的元算
    

    List的遍历

    foreach i [list a b c d] {
        puts $i
    }
    
    #------------------------------------------------
    # 同时遍历两个List。循环次数等于最长的List的长度。
    # 某个List的长度不够时,对应的变量值为空
    foreach i [list a b c d e f g] j [list 1 2 3 4] {
      puts "$i - $j"
    }
    
    #------------------------------------------------
    # 每次取用List中的多个元素
    foreach {i j} [list a b c d e f] {
        puts "$i $j"
    }
    
    # 用作变量赋值,类似于perl或php里面的list命令
    foreach {llx lly urx ury} [list 10.0 11.0 30.0 33.0] break
    puts "$llx $lly $urx $ury"
    
    标签:

      分享到:
      comments powered by Disqus

      28/33ms