我刚刚发现自己处于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