Tcl 拆分列表中的列表元素
Tcl split list elements in the list
我正在尝试拆分列表中的一些列表元素。
我想列出来自:
前列者:{{aa, bb, cc, dd, ee;} {ff, gg, hh, ii, jj;}}
至:
后名单:{aa bb cc dd ee ff gg hh ii jj}
我尝试使用 split 命令来处理它们,但是 beforelist
有一些棘手的地方:逗号、分号。
几种方式:
#!/usr/bin/env tclsh
set beforelist {{aa, bb, cc, dd, ee;} {ff, gg, hh, ii, jj;}}
# Iterate over each element of each list in beforelist and remove
# trailing commas and semicolons before appending to afterlist
set afterlist {}
foreach sublist $beforelist {
foreach elem $sublist {
lappend afterlist [regsub {[,;]$} $elem ""]
}
}
puts "{$afterlist}"
# Remove all commas and semicolons at the end of a word followed by space
# or close brace, then append sublists to afterlist.
set afterlist {}
foreach sublist [regsub -all {\M[,;](?=[ \}])} $beforelist ""] {
lappend afterlist {*}$sublist
}
puts "{$afterlist}"
这不一定是使用列表来解决的问题。保持字符串操作:
% set beforeList {{aa, bb, cc, dd, ee;} {ff, gg, hh, ii, jj;}}
{aa, bb, cc, dd, ee;} {ff, gg, hh, ii, jj;}
% string map {\{ "" \} "" \; "" , ""} $beforeList
aa bb cc dd ee ff gg hh ii jj
如果我们删除标点符号,我们将剩下 2 个可以连接的列表
set afterlist [concat {*}[string map {, "" ; ""} $beforelist]]
我正在尝试拆分列表中的一些列表元素。
我想列出来自:
前列者:{{aa, bb, cc, dd, ee;} {ff, gg, hh, ii, jj;}}
至:
后名单:{aa bb cc dd ee ff gg hh ii jj}
我尝试使用 split 命令来处理它们,但是 beforelist
有一些棘手的地方:逗号、分号。
几种方式:
#!/usr/bin/env tclsh
set beforelist {{aa, bb, cc, dd, ee;} {ff, gg, hh, ii, jj;}}
# Iterate over each element of each list in beforelist and remove
# trailing commas and semicolons before appending to afterlist
set afterlist {}
foreach sublist $beforelist {
foreach elem $sublist {
lappend afterlist [regsub {[,;]$} $elem ""]
}
}
puts "{$afterlist}"
# Remove all commas and semicolons at the end of a word followed by space
# or close brace, then append sublists to afterlist.
set afterlist {}
foreach sublist [regsub -all {\M[,;](?=[ \}])} $beforelist ""] {
lappend afterlist {*}$sublist
}
puts "{$afterlist}"
这不一定是使用列表来解决的问题。保持字符串操作:
% set beforeList {{aa, bb, cc, dd, ee;} {ff, gg, hh, ii, jj;}}
{aa, bb, cc, dd, ee;} {ff, gg, hh, ii, jj;}
% string map {\{ "" \} "" \; "" , ""} $beforeList
aa bb cc dd ee ff gg hh ii jj
如果我们删除标点符号,我们将剩下 2 个可以连接的列表
set afterlist [concat {*}[string map {, "" ; ""} $beforelist]]