Вот код, который делает то, что вы хотите с помощью одного цикла foreach. Нет необходимости создавать временные списки - при условии, что у вас есть общие индексы для массивов (вы не указали).
array set GOLD {a 1 b 2 c 3 d 4}
array set TEST {d TCL c Guys b Stack a Hello}
array set DIFF {a Hi c for b Format d print}
foreach idx [lsort [array names GOLD]] {
puts "$GOLD($idx)\t$TEST($idx)\t$DIFF($idx)"
}
Если у вас нет общих индексов для массивов (тогда я задаюсь вопросом о полезности печатной таблицы), вы можете сделать это (хотя относительный порядок не определен):
foreach {gidx gval} [array get GOLD] {tidx tval} [array get TEST] {didx dval} [array get DIFF] {
puts "$gval\t$tval\t$dval"
}