Двойное соответствие массива - PullRequest
0 голосов
/ 18 февраля 2010

Я только что оказался в положении, когда у меня есть два массива в Tcl.

Мне дали $W_Array и $P_Array.

Мне нужно пройти через один массив, не зная, какой размер у каждого из них перед рукой, и выполнить команду только тогда, когда есть значение для обоих массивов. Да, длина массива может быть разной.

Каков наилучший способ сделать это?

Ответы [ 3 ]

3 голосов
/ 18 февраля 2010

Другие ответы перешли к использованию списков, я полагаю, вы имеете в виду массив Tcl , которые также называются хэш-картами или ассоциативными массивами.

Я думаю, вы просите что-то вроде:

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 голос
/ 18 февраля 2010

Не совсем точно, что вы подразумеваете под "значением для обоих массивов", но foreach в tcl поддерживает итерацию по нескольким массивам одновременно ... так что вы можете сказать, например, foreach w $W_Array p $P_Array { if {$w == $val && $p == $val} { ... } }

Если массивы не имеют одинаковую длину, foreach вернет все значения из самого длинного массива и пустое значение {} для отсутствующих элементов в любых более коротких массивах.

0 голосов
/ 18 февраля 2010

Используйте команду llength, чтобы узнать, содержат ли массивы значение.

if {[llength $W_Array] > 0 && [llength $P_Array] > 0} {
# Do something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...