2

我有两个清单:

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
4

2 回答 2

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 行,那么您不需要-nonewlineonputs和尾随空格,并且 finalputs也可以。

于 2012-07-03T12:26:22.647 回答
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

于 2015-11-21T04:35:23.103 回答