如何在tcl8.4.x中合并两个列表
我有如下列表作为某个函数的输出如何在tcl8.4.x中合并两个列表,tcl,Tcl,我有如下列表作为某个函数的输出 puts $m {{bi 1/7 1/8}} {{uni 1/6}} 我需要将上述内容合并为{{bi1/71/8}{uni1/6}}单个列表。我不能使用concat,因为我的是8.4.x。请提供帮助我不太确定您希望列表连接的深度(请注意,concat实际上比Tcl7.0早,所以您当然有了它!),但下面是如何使用为8.4编写的代码去除列表的一个级别: proc concat_one_level {input_list} { set accum_list
puts $m
{{bi 1/7 1/8}} {{uni 1/6}}
我需要将上述内容合并为
{{bi1/71/8}{uni1/6}}
单个列表。我不能使用concat,因为我的是8.4.x。请提供帮助我不太确定您希望列表连接的深度(请注意,concat
实际上比Tcl7.0早,所以您当然有了它!),但下面是如何使用为8.4编写的代码去除列表的一个级别:
proc concat_one_level {input_list} {
set accum_list {}
foreach item $input_list {
eval [linsert $item 0 lappend accum_list]
# From 8.5 onwards, we'd use this instead:
# lappend accum_list {*}$item
}
return $accum_list
}
以交互方式测试它(在8.5中;我不再安装8.4):
如果您可以安装,那么struct::list
包声称仍然支持这样一个古老版本的tcl,并且有一个命令可以返回您想要的列表
示例tclsh
repl会话:
% package require struct::list
1.8.3
% set m {{{bi 1/7 1/8}} {{uni 1/6}}}
{{bi 1/7 1/8}} {{uni 1/6}}
% ::struct::list flatten $m
{bi 1/7 1/8} {uni 1/6}
% ::struct::list flatten -full $m
bi 1/7 1/8 uni 1/6
以下其中一项可能满足您的需要:
% puts $m
{{bi 1/7 1/8}} {{uni 1/6}}
% puts [list [join $m]]
{{bi 1/7 1/8} {uni 1/6}}
% puts [llength [list [join $m]]]
1
%
你知道8.4不受支持吗?谢谢Donal..太棒了!!
% puts $m
{{bi 1/7 1/8}} {{uni 1/6}}
% puts [list [join $m]]
{{bi 1/7 1/8} {uni 1/6}}
% puts [llength [list [join $m]]]
1
%
% puts $m
{{bi 1/7 1/8}} {{uni 1/6}}
% puts [join $m]
{bi 1/7 1/8} {uni 1/6}
% puts [llength [join $m]]
2
%