TCL: LIST命令-lsearch, lsort, lrange

Augusdi發表於2015-08-12


命令格式:

lsearch list pattern

lsort list

lrange list first last

 

例項:

set list [list {Washington 1789} {Adams 1797} {Jefferson 1801} \

               {Madison 1809} {Monroe 1817} {Adams 1825} ]

 

set x [lsearch $list Washington*]

set y [lsearch $list Madison*]

incr x

incr y -1                        ;# Set range to be not-inclusive

 

set subsetlist [lrange $list $x $y]

 

puts "The following presidents served between Washington and Madison"

foreach item $subsetlist {

    puts "Starting in [lindex $item 1]: President [lindex $item 0] "

}

 

set x [lsearch $list Madison*]

 

set srtlist [lsort $list]

set y [lsearch $srtlist Madison*]

 

puts "\n$x Presidents came before Madison chronologically"

puts "$y Presidents came before Madison alphabetically"

 

執行結果:

The following presidents served between Washington and Madison

Starting in 1797: President Adams

Starting in 1801: President Jefferson

 

3 Presidents came before Madison chronologically

3 Presidents came before Madison alphabetically

 

附上常見的列表命令:

1          list命令

            語法: list ? value value...?

            這個命令生成一個listlist的元素就是所有的value。例:

            % list 1 2 {3 4}

            1 2 {3 4}

concat命令:

            語法:concat list ?list...?

            這個命令把多個list合成一個list,每個list變成新list的一個元素。

3          lindex命令

            語法:lindex list index

            返回list的第index(0-based)元素。例:

            %   lindex  {1 2 {3 4}} 2

            3 4

4          llength命令

            語法:llength  list

            返回list的元素個數。例

            % llength  {1 2 {3 4}}

            3

5          linsert命令

            語法:linsert list index value ?value...?

            返回一個新串,新串是把所有的value引數值插入list的第index(0-based)元素之前得到。例:

            % linsert {1 2 {3 4}}  1   7 8  {9 10}

            1 7 8 {9 10} 2 {3 4}

6          lreplace命令:

            語法:lreplace list first last ?value value ...?

            返回一個新串,新串是把list的第firs (0-based)t到第last (0-based)元素用所有的value引數替換得到的。如果沒有value引數,就表示刪除第first到第last個元素。例:

            % lreplace {1 7 8 {9 10} 2 {3 4}}  3 3

            1 7 8 2 {3 4}

            % lreplace {1 7 8 2 {3 4}}  4  4  4 5 6

            1 7 8 2 4 5 6

7          lrange 命令:

            語法:lrange list first last

            返回list的第first (0-based)到第last (0-based)元素組成的串,如果last的值是end。就是從第first個直到串的最後。

            例:

            % lrange  {1 7 8 2 4 5 6} 3 end

            2 4 5 6

8          lappend命令:

            語法:lappend varname value ?value...?

            把每個value的值作為一個元素附加到變數varname後面,並返回變數的新值,如果varname不存在,就生成這個變數。例:

            % lappend  a  1 2 3

            1 2 3

            % set a

            1 2 3

9          lsearch 命令:

            語法:lsearch ?-exact? ?-glob? ?-regexp? list pattern

            返回list中第一個匹配模式pattern的元素的索引,如果找不到匹配就返回-1-exact-glob -regexp是三種模式匹配的技術。-exact表示精確匹配;-glob的匹配方式和string match命令的匹配方式相同,將在後面第八節介紹string命令時介紹;-regexp表示正規表示式匹配,將在第八節介紹regexp命令時介紹。預設時使用-glob匹配。例:

            % set  a  { how are you }

             how are you

            % lsearch $a  y*

            2

            % lsearch $a y?

            -1

10         lsort命令:

            語法:lsort ?options? list

            這個命令返回把list排序後的串。options可以是如下值:

            -ascii    ASCII字元的順序排序比較.這是預設情況。

            -dictionary    按字典排序,-ascii不同的地方是:

                          (1)不考慮大小寫

                          (2)如果元素中有數字的話,數字被當作整數來排序.

                           因此:bigBoy排在bigbangbigboy之間, x10y 排在x9yx11y之間.

            -integer   list的元素轉換成整數,按整數排序.

            -real       list的元素轉換成浮點數,按浮點數排序.

            -increasing    升序(ASCII字元比較)

            -decreasing    降序(ASCII字元比較)

            -command   command TCL自動利用command 命令把每兩個元素一一比較,然後給出排序結果。

11         split命令:

            語法:split string ?splitChars?

            把字串string按分隔符splitChars分成一個個單詞,返回由這些單片語成的串。如果splitChars

            是一個空字元{}string被按字元分開。如果splitChars沒有給出,以空格為分隔符。例:

            % split "how.are.you" .

            how are you

            % split "how are you"

            how are you

            % split "how are you" {}

            h o w { } a r e { } y o u

12         join命令

            語法:join list ?joinString? 

            join命令是命令的逆。這個命令把list的所有元素合併到一個字串中,中間以joinString分開。預設的joinString是空格。例:

            % join {h o w { } a r e { } y o u} {}

            how are you

            % join  {how are you} .

            how.are.you

相關文章