双阵列对应

时间:2010-02-18 01:05:33

标签: arrays tcl

我刚刚发现自己处于Tcl中有两个数组的位置。

我已获得$W_Array$P_Array

我需要遍历一个数组而不知道每个数据的大小是什么,并且只有当两个数组都有值时才执行命令。是的,数组长度可能不同。

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

不确定“两个数组的值”究竟是什么意思,但tcl的foreach支持同时迭代多个数组...所以你可以说例如 foreach w $W_Array p $P_Array { if {$w == $val && $p == $val} { ... } }

当数组的长度不同时,foreach将返回最长数组中的所有值,并返回任何较短数组中缺失元素的空值{}

答案 2 :(得分:-1)

使用llength命令查明数组是否包含值。

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