我是Tcl的新手并尝试这样做:
sortList :: { 3 6 8 7 0 1 4 2 9 5 } -> { 0 1 2 3 4 5 6 7 8 9 }
这是我的代码:
set lst [list 3 6 8 7 0 1 4 2 9 5]
for {set i 0} {$i < [llength "$lst"]} {incr i} {
for {set j 0} {$j < [llength "$lst"]-1 } {incr j} {
if {[lindex $lst $j] > [lindex $lst $j+1]} {
set min [lindex $lst $j+1]
set [lindex $lst $j+1] [lindex $lst $j]
set [lindex $lst $j] $min
}
}
}
puts $lst
但它保持打印相同的列表:
3 6 8 7 0 1 4 2 9 5
我需要尽快帮助,谢谢。
答案 0 :(得分:1)
你遇到的问题是这两行:
set [lindex $lst $j+1] [lindex $lst $j]
set [lindex $lst $j] $min
这些将更新名称恰好是小整数的变量(因为这是列表中的内容);不是你想要的!
要 修改 列表中的元素,您应该使用lset
命令:
lset list $j+1 [lindex $lst $j]
lset lst $j $min
这是因为列表是值; lset
命令改变变量以包含一个新列表,该列表与应用了修改的旧列表相同。它也有效地做到了这一点。
它还会缩短代码。