2011-08-03 104 views
2

TCL TK與列表和數組的區別在哪裏? 我創建了3個數組的列表。返回數組列表

像這樣的一個循環

set x($idx) 1 
incr idx 

,後來我要回了 「RET」 對象

list set ret { $x $x2 $x3 } 

lassign $data x x2 x3 

但這不會再次解析它們工作... :( 可能有人請再次幫助我..該死的tcl tk ...:D:D

糾正我,如果我不正確,它不可能建立一個2dim列表或數組?

回答

2

您的陣列被稱爲x - 您可以參考它的元素set x(1)set x(2)等$ x2和$ x3在這種情況下沒有意義。

如果你想有一個2維數組,你可以在TCL如下模擬它:

set a(1,1) 0 ;# set element 1,1 to 0 
set a(1,2) 5 ;# set element 1,2 to 5 

如果你只是使用列表

set l1 [list a b c] 
set l2 [list d e f] 
set lol [list $l1 $l2] 
+0

是有可能通過一個循環來添加元素到列表?像追加? – Roby

+0

是的,非常容易。用於例如對於{set i 1} {$ i <= 10} {incr i} {lappend l1 $ i} – TrojanName

1

您可以使用清單可能更容易array get/set將數組作爲過程參數/返回值傳遞。例如:

proc someProc {arr} { 
    array set x $arr 
    set x(5) 0 
    return [array get x] 
} 

使用示例:

% set a(0) -1 
% set a(1) 1 

% parray a 
a(0) = -1 
a(1) = 1 

% array set b [someProc [array get a]] 

% parray b 
b(0) = -1 
b(1) = 1 
b(5) = 0 
+0

從Tcl 8.5開始,您可以像字典一樣傳遞數組類似的值(通過'dict'命令操縱)。 'array get'命令產生一個字典,'array set'命令使用一個。 –