2012-03-14 301 views
0

我想將以下c代碼轉換爲TCL。在TCL中使用兩個變量的循環

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

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

我需要改變這個for循環TCL,我不想使用TCL在foreach功能... TCL是否爲循環結構允許兩個循環變量???

+1

這不是真正的代碼,是嗎?從數組末尾讀取是一個糟糕的主意。 – 2012-03-14 21:04:55

+0

這不是真正的代碼,它類似於將[]中的第一個元素分配給b [],忽略[]中的第二個元素並將[]的第三個元素再次分配給b [],省略將[]的相鄰元素分配給b []。 – user1270123 2012-03-14 21:10:22

+0

它類似於將[]的奇數位置分配給b []。 – user1270123 2012-03-14 21:11:15

回答

4

你見過discussion here

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

+1。您可以使用分號而不是換行符來實現更緊湊的外觀:'for {set i 1; set j 1} {$ i <$ n} {incr i; incr j} {...}' – 2012-03-15 02:05:14

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