tcl循环遍历多个列表

时间:2015-10-27 16:11:56

标签: foreach tcl

我有两个列表,我喜欢操纵..(我是一个新手......)。我想关联这两个列表并创建第三个列表,其中添加了一些数据。

我的数据:

set aes {ae0 ae3 ae6 ae1v1 ae1v8}

set c {c1 c2 c3 k1 k2} 

foreach A $aes { 
foreach C $c { 
puts ${A}_$C
}
}

我得到的数据是: ae0_c1 ae0_c2 ae0_c3 ae0_k1 ae0_k2 .. ..

我想做的是 在此前面添加一些数据。
AE-To-c = All ae0_c1 ae0_c2 ae0_c3 ae0_k1 ae0_k2 .. End

2 个答案:

答案 0 :(得分:0)

% set aes {ae0 ae3 ae6 ae1v1 ae1v8}
ae0 ae3 ae6 ae1v1 ae1v8
% set c {c1 c2 c3 k1 k2} 
c1 c2 c3 k1 k2
% foreach A $aes { 
    foreach C $c { 
        # saving into 'result' variable
        lappend result ${A}_${C}
    }
}
% set data "some more here"
some more here
% set result
ae0_c1 ae0_c2 ae0_c3 ae0_k1 ae0_k2 ae3_c1 ae3_c2 ae3_c3 ae3_k1 ae3_k2 ae6_c1 ae6_c2 ae6_c3 ae6_k1 ae6_k2 ae1v1_c1 ae1v1_c2 ae1v1_c3 ae1v1_k1 ae1v1_k2 ae1v8_c1 ae1v8_c2 ae1v8_c3 ae1v8_k1 ae1v8_k2
% set result [linsert $result 0 $data]
some more here ae0_c1 ae0_c2 ae0_c3 ae0_k1 ae0_k2 ae3_c1 ae3_c2 ae3_c3 ae3_k1 ae3_k2 ae6_c1 ae6_c2 ae6_c3 ae6_k1 ae6_k2 ae1v1_c1 ae1v1_c2 ae1v1_c3 ae1v1_k1 ae1v1_k2 ae1v8_c1 ae1v8_c2 ae1v8_c3 ae1v8_k1 ae1v8_k2

答案 1 :(得分:0)

您的问题并非100%明确。这是你想要的吗?

set res [list AE-To-c = All]
foreach A $aes { 
    foreach C $c { 
        lappend res ${A}_$C
    }
}
lappend res End

如果你想做我认为你想做的事情,你需要在列表中捕获两个列表的排列而不是打印出来,然后将该列表包装在前缀和后缀中。

上述方法使用AE-To-c = All前缀预加载结果列表,然后使用lappend获取排列,最后将End后缀添加为列表中的最后一个元素

另一种方式:

set res [list]
foreach A $aes { 
    foreach C $c { 
        lappend res ${A}_$C
    }
}
concat [list AE-To-c = All] $res End

在此变体中,首先创建排列列表,然后将前缀列表,排列列表和后缀列表(是,End是列表)连接到一个平面列表中。

文档:concatforeachlappendlistset