2010-02-18 75 views
0

我剛剛發現自己處於Tcl中有兩個陣列的位置。雙陣列對應

我給$W_Array$P_Array

我需要通過一個陣列不知道什麼每一個的大小是手之前遍歷,且僅當存在用於兩個陣列的值執行命令。是的,數組的長度可能會不同。

這樣做的最好方法是什麼?

+0

看來你真的是名單,這是更喜歡什麼其他語言調用數組。 Tcl數組是哈希映射。您可以在不轉換它的情況下獲取Tcl列表的長度,而不是Tcl數組。 – 2010-02-18 09:15:14

+0

如果你可以澄清你是指列表(a,b,c)還是數組(a = X,b = Y,c = Z),答案可能會更有幫助。 – RHSeeger 2010-02-18 18:20:50

回答

1

不確定「兩個數組的值」是什麼意思,但tcl的foreach支持一次對多個數組進行迭代......所以你可以說,例如, foreach w $W_Array p $P_Array { if {$w == $val && $p == $val} { ... } }

當陣列是相同的長度的不,foreach將從最長陣列和用於在任何較短的陣列中的缺少的元素的空值返回{}所有值。

-1

使用llength命令,以找出是否數組包含一個值。

if {[llength $W_Array] > 0 && [llength $P_Array] > 0} { 
# Do something 
} 
+0

我不認爲這接近回答實際問題。無可否認,這個問題有點含糊。 – 2010-02-18 12:24:57

3

其他的答案躍升到使用列表,我想你的意思是Tcl's array,這也被稱爲哈希映射或關聯數組。

我想你問的是這樣的:

array set a1 {a 1 b 2 c 3 d 4 e 5} 
array set a2 {z 0 x 1 b 2 e 99} 
foreach n [array names a1] { 
    if {[info exists a2($n)]} { 
    puts "Do something with $a1($n) and $a2($n)" 
    } 
} 

# FOREACH LOOP RESULTS IN THESE TWO PRINTOUTS 
Do something with 5 and 99 
Do something with 2 and 2