对于在TCL中具有两个变量的循环

时间:2012-03-14 21:02:42

标签: c tcl

我想将以下c代码转换为TCL。

int a[10],b[10];
int n=20

for (i=1,j=1; i<=n; i+=2,j++)
{
  b[j]=a[i];
}

我需要将此循环更改为TCL,我不想在TCL中使用foreach功能... TCL for loop结构是否允许两个循环变量???

2 个答案:

答案 0 :(得分:4)

您是否看过discussion here

  set n 6
  for {
              set  i     1
              set  j     1
          } {
              $i < $n
          } {
              incr i
              incr j
          } {
              puts "$i $j"
   }

答案 1 :(得分:2)

这并不能完全满足您的需求,但考虑到您来自C,您需要让目标数组开始......它可能会实现您的实际目标。

foreach循环可以将名称列表作为存储变量。每个名称都从输入列表中获取一个值。因此,您可以使用它每次迭代输入列表中的多个值:

set result {}
foreach {x1 x2} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20} {
    lappend result $x1
}
puts $result
# 1 3 5 7 9 11 13 15 17 19

与您的问题完全无关,但也很好,它也可以采用多个变量名称和列表:

set result {}
foreach {a1 a2} {1 2 3 4 5 6} b {A B C} {
    lappend result $a1 $b $a2 -
}
puts $result
# 1 A 2 - 3 B 4 - 5 C 6