我们可以在tcl中使用这样的foreach循环吗?

时间:2012-07-03 12:10:27

标签: foreach tcl

我有两个清单:

set lista {5 6}
set listb {8 9}

以下代码用于循环两个列表:

foreach listaelement listbelement $lista $listb {
    puts $listaelement &listbelement 
}

我们怎样才能使用foreach来实现输出:
lista的第一个元素,listb的第一个元素,
lista的第一个元素,listb的第二个元素,
lista的第二个元素,listb的第一个元素,
lista的第二个元素,listb的第二个元素,

5 8
5 9
6 8
6 9

2 个答案:

答案 0 :(得分:6)

只是嵌套循环并使用-nonewline应该给出你想要的输出:

foreach listelementa $lista {
   foreach listelementb $listb {
      puts -nonewline "$listelementa  $listelementb  "
   }
}
puts ""

注意:你需要在puts语句中使用引号来阻止Tcl将第一个参数解释为通道ID。

Tcl允许您在foreach语句中引用多个列表

foreach listelementa $lista listelementb $listb {
    puts -nonewline "$listelementa  $listelementb  "
}
puts ""

然而,这会将5 8 6 9作为输出 - 而不是您需要的。

编辑:我很确定当我回答输出格式为1行的问题时,如果你真的想要每行1行,那么你不需要{{1在-nonewline和尾随空格以及最终puts也可以。{/ p>

答案 1 :(得分:0)

set lista {5 6}

set listb {8 9}


set indexb [expr ([llength $listb ] -1)]

foreach listano $lista {


for {set i 0 } {$i <= $indexb } {incr i} {

 set element [lindex $listb $i]

 puts "element is $listano $element"
 }
}

元素是5 8 元素是5 9 元素是6 8 元素是6 9