2012-02-22 47 views

回答

3

TCL 8.4具有-dictionary標誌,它提供了不區分大小寫的比較。如果你的字符串不包含數字,我認爲這個行爲等於-nocase標誌。

從文檔:

-dictionary 使用字典式的比較。這與-ascii相同,除了(a)情況被忽略,除非作爲決勝者,並且(b)如果兩個字符串包含嵌入的數字,則數字會作爲整數比較,而不是字符。例如,在-dictionary模式下,bigBoy在bigbang和bigboy之間排序,而x10y在x9y和x11y之間排序。

-nocase 導致比較以不區分大小寫的方式處理。如果與-dictionary,-integer或-real選項結合使用,則不起作用。

http://www.hume.com/html85/mann/lsort.html

+0

謝謝!我可以忍受數字被視爲整數的事實,但這並不理想。但我會等待看看有沒有人給出答案。 – TrojanName 2012-02-22 13:26:28

2

這裏有一個使用Schwartzian變換:

set lst {This is a Mixed Case sentence and this is the End} 
set tmp [list] 
foreach word $lst {lappend tmp [list $word [string tolower $word]]} 
unset lst 
foreach pair [lsort -index 1 $tmp] {lappend lst [lindex $pair 0]} 
puts $lst 

輸出

a and Case End is is Mixed sentence the This this 
+0

謝謝你。十分優雅。 – TrojanName 2012-02-22 15:39:58

1

寫自己的字符串比較過程:

proc nocaseCompare {a b} { 
    set a [string tolower $a] 
    set b [string tolower $b] 
    if {$a < $b} { 
     return -1 
    } elseif {$a > $b} { 
     return 1 
    } else { 
     return 0 
    } 
} 


set lst {This is a Mixed Case sentence and this is the End} 
puts [lsort -command nocaseCompare $lst] 

輸出:

a and Case End is is Mixed sentence the This this 
+0

很棒的答案!謝謝 – TrojanName 2012-02-22 20:42:40

相關問題