我正在使用 -nocase 标记执行简单的TCL lsort 。但是,我正在运行该代码的一个系统仍在使用 TCL 8.4 ,其中nocase不可用。有没有简单的解决方法,还是我必须手动处理?
答案 0 :(得分:3)
TCL 8.4具有-dictionary标志,该标志提供不区分大小写的比较。如果你的字符串中没有数字,我认为行为等于-nocase标志。
来自文档:
<强> -dictionary 强> 使用字典式比较。这与-ascii相同,除了(a)除了作为平局之外被忽略的情况和(b)如果两个字符串包含嵌入数字,则数字比较为整数,而不是字符。例如,在-dictionary模式中,bigBoy在bigbang和bigboy之间排序,而x10y在x9y和x11y之间排序。
<强> -nocase 强> 导致比较以不区分大小写的方式处理。如果与-dictionary,-integer或-real选项结合使用则无效。
答案 1 :(得分: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
答案 2 :(得分: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