|
Set
1.对变量进行赋值操作
2.变量的值已经发生改变
Append
1.增加字符串 跟在append后面的变量不能使用变量置换符号
如只能使用:
append txt “sldfkjlsjfl”或append txt skjdflksjdflsjkdf
不能使用:
Append $txt “sldfkjlsjfl”
2.变量的值已经发生改变
Incr
1.增加整型变量 跟在incr后面的变量不能使用变量置换符号
如只能使用:
incr int +3
不能使用:
Incr $ int +3
2.使用incr时后面跟的是正负数而不是加减法
3.变量的值已经发生改变
expr
把此命令放在这个位置应该不对
1.因为expr操作的是表达式,因些此处使用的变量一定要使用$(变量转换符)来进行使用
2.注意使用后变量本身的值没有改变
总结
因此在使用变量的时候比如说for语句,或需要变量自增的时候建议使用“incr var +-setp“或”set var [expr var+setp]”
凡是使用了$变量转换符的都不会改变其值,除非在使用set变量.
有点像高级语言中的引用和值调用
包换之后使用的lreplace命令如下面的例子:
Set lista {2 3 4 5 6 7 8 9 9 10}
Set j 2
if {[lindex $lista $j]<[lindex $lista [expr $j+1]]} {
set temp [lindex $lista $j]
lreplace $lista $j $j [lindex $lista [expr $j+1]]
lreplace $lista [expr $j+1] [expr $j+1] $temp
}
puts "after arrary $lista"
实现方法如下:
set lista {2 3 4 5 6 7 8 9 9 10}
set j 2
if {[lindex $lista $j]<[lindex $lista [expr $j+1]]} {
set temp [lindex $lista $j]
set lista [lreplace $lista $j $j [lindex $lista [expr $j+1]] ]
set lista [lreplace $lista [expr $j+1] [expr $j+1] $temp ]
}
puts "after arrary $lista"
附上使用list和数组实现冒泡算法的例子
proc bubble { lista } {
set temp {}
for { set i 0 } { $i<9 } { incr i +1 } {
for {set j 0} { $j<[expr 9-$i] } { incr j +1 } {
if {[lindex $lista $j]<[lindex $lista [expr $j+1]]} {
set temp [lindex $lista $j]
set lista [lreplace $lista $j $j [lindex $lista [expr $j+1]]]
set lista [lreplace $lista [expr $j+1] [expr $j+1] $temp]
}
}
}
puts $lista
}
set lista {10 2 3 4 5 1 7 8 9 0}
bubble $lista
使用数组法:
proc mapao { lista } {
set length [llength $lista]
for { set temp 0 } { $temp<$length } { incr temp +1 } {
set arrey($temp) [lindex $lista $temp]
}
puts "the array"
puts $arrey
set arreytemp 0
for { set i 0 } { $i<[expr $length-1] } {incr i +1} {
for { set j 0 } { $j<[expr [expr $length-1]-$i] } {incr j +1} {
if {$arrey($j)<$arrey([expr $j+1])} {
set arreytemp $arrey($j)
set arrey($j) $arrey([expr $j+1])
set arrey([expr $j+1]) $arreytemp
}
}
}
for { set temp 0 } { $temp<$length} { incr temp +1 } {
append listb $arrey($temp) { }
}
puts $listb
}
set lista {1 2 3 4 5 6 19 3 6 7 8 9}
mapao $lista |
|