我剛剛發現自己處於Tcl中有兩個陣列的位置。雙陣列對應
我給$W_Array
和$P_Array
。
我需要通過一個陣列不知道什麼每一個的大小是手之前遍歷,且僅當存在用於兩個陣列的值執行命令。是的,數組的長度可能會不同。
這樣做的最好方法是什麼?
我剛剛發現自己處於Tcl中有兩個陣列的位置。雙陣列對應
我給$W_Array
和$P_Array
。
我需要通過一個陣列不知道什麼每一個的大小是手之前遍歷,且僅當存在用於兩個陣列的值執行命令。是的,數組的長度可能會不同。
這樣做的最好方法是什麼?
不確定「兩個數組的值」是什麼意思,但tcl的foreach
支持一次對多個數組進行迭代......所以你可以說,例如, foreach w $W_Array p $P_Array { if {$w == $val && $p == $val} { ... } }
當陣列是相同的長度的不,foreach
將從最長陣列和用於在任何較短的陣列中的缺少的元素的空值返回{}
所有值。
使用llength
命令,以找出是否數組包含一個值。
if {[llength $W_Array] > 0 && [llength $P_Array] > 0} {
# Do something
}
我不認爲這接近回答實際問題。無可否認,這個問題有點含糊。 – 2010-02-18 12:24:57
其他的答案躍升到使用列表,我想你的意思是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
看來你真的是名單,這是更喜歡什麼其他語言調用數組。 Tcl數組是哈希映射。您可以在不轉換它的情況下獲取Tcl列表的長度,而不是Tcl數組。 – 2010-02-18 09:15:14
如果你可以澄清你是指列表(a,b,c)還是數組(a = X,b = Y,c = Z),答案可能會更有幫助。 – RHSeeger 2010-02-18 18:20:50