2012-02-22 13 views

答えて

3

TCL 8.4には大文字小文字を区別しない比較を提供する-dictionaryフラグがあります。あなたの文字列に数字が入っていなければ、その動作は-nocaseフラグと同じだと思います。ドキュメントから

-dictionary 使用辞書スタイルの比較。これは、(a)タイブレーカー以外のケースが無視され、(b)2つの文字列に埋め込み番号が含まれる場合、数字は文字ではなく整数として比較される点を除いて、-asciiと同じです。例えば、bigBoyはbigbangとbigboyの間をソートし、x10yはx9yとx11yのソートを行います。

-nocase 大文字と小文字を区別しない方法で比較されます。 -dictionary、-integer、または-realオプションと組み合わせても効果はありません。

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

+0

ありがとうございました!おそらく数字は整数として扱われますが、それは理想的ではありません。しかし誰かが答えを出すのを待つつもりです。 – TrojanName

2

ここで変換シュワルツです:

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] 

出力:

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

1

独自の文字列比較の手順を書きます:

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

すばらしい答え!ありがとう – TrojanName

関連する問題