名称
foreach - 反复循环操作一个或多个列表的每个元素语法
foreach varname list body
foreach varlist1 list1 ?varlist2 list2 ...? body
描述
foreach命令执行一个循环,循环的变量是一个或多个列表的元素。最简单的情况下是一个循环变量 varname和一个列表 list, list中的值一次分配给 varname。 body变元是一个Tcl脚本,对于每个 list中的元素(顺序是由第一个到最后一个), foreach分配元素的内容给 varname,然后调用Tcl解释器去执行 body。一般情况下可以有多个列表,并且每个列表可以是循环的变量,在每次循环中每个varlist变量被分配给相应的list。foreach将一直循环执行所有列表中的值,如果在循环中其中一个列表的元素全部使用了,那么在后面的循环中这个列表的元素就用空字符串来代替。
break和continue可以在body中调用,用法和for命令相同,并且返回一个空字符串。
示例
这个循环打印每一个列表中的数值值和数值的平方、立方set values {1 3 5 7 2 4 6 8} ;# Odd numbers first, for fun!
puts "Value/tSquare/tCube" ;# Neat-looking header
foreach x $values { ;# Now loop and print...
puts " $x/t [expr {$x**2}]/t [expr {$x**3}]"
}
下面的循环使用i和j作为循环变量操作列表中每一对元素:
set x {}
foreach {i j} {a b c d e f} {
lappend x $j $i
}
# The value of x is "b a d c f e"
# There are 3 iterations of the loop.
下面的循环使用i和j作为循环变量同时操作两个列表中的元素:
set x {}
foreach i {a b c} j {d e f g} {
lappend x $i $j
}
# The value of x is "a d b e c f {} g"
# There are 4 iterations of the loop.
下面两个列表合并起来:
set x {}
foreach i {a b c} {j k} {d e f g} {
lappend x $i $j $k
}
# The value of x is "a d e b f g c {} {}"
# There are 3 iterations of the loop.