如何对Tcl列表元素排序?需调整自定义排序为全字符串比较
Tcl列表排序:改为全字符串排序
我需要将如下列表:
"_7_to_0_k3" "_7_to_0_k1"
排序为:
"_7_to_0_k1" "_7_to_0_k3"
我之前写了一段按最后两个字符排序的Tcl自定义排序代码,但现在想改成基于整个字符串排序,该怎么调整?当前代码如下:
proc sort_by_last_two {a b} { set a_last_two [string range $a end-1 end] set b_last_two [string range $b end-1 end] return [string compare $a_last_two $b_last_two] } set sorted_list [lsort -command sort_by_last_two $my_lis]
解决方案
最简单的方式:直接使用默认排序
Tcl的lsort命令默认就是按字符串字典序排序,完全满足你的需求,不需要自定义排序命令,直接简化代码:
set sorted_list [lsort $my_lis]
保留自定义命令的方式(如需扩展)
如果后续有扩展需求必须使用自定义排序过程,只需要修改过程逻辑,直接比较整个字符串即可:
proc sort_full_string {a b} { return [string compare $a $b] } set sorted_list [lsort -command sort_full_string $my_lis]
内容的提问来源于stack exchange,提问作者flash
相关产品推荐
相关产品推荐

