2010-02-18 57 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