所以我有一个列表,在TCL中,项目存储为{“1”“2”“3”},空格分隔。我希望将此列表转换为{“1”,“2”,“3”} - 除了通过foreach和lappending,到每个项目的结尾之外,这将是一种有效的方法?
谢谢!
答案 0 :(得分:4)
您将列表的字符串表示与其内存中表示混淆。内存中的列表就是那个 - 其他不相交元素的有序列表。如果你需要“漂亮地打印”它(通常输出到终端)从它做一个字符串,然后输出它。
在您的案例中创建字符串的最简单方法是使用已建议的[join]
。
换句话说,不要被代码
的事实所欺骗set L [list 1 2 3]
puts $L
输出“1 2 3”:这并不意味着“列表存储为字符串,其元素以空格分隔”。它只是列表的默认字符串表示,当你要求它通过将该列表传递给需要字符串值的[puts]
时,隐式地从列表中创建一个字符串。 ( NB 严格来说,“期望字符串值”对于Tcl内部结构是不正确的,但现在让我们忽略它。)
答案 1 :(得分:3)
你的问题对我来说没有意义。在TCL中,列表在内部存储为字符串。当您说要列出{“1”,“2”,“3”}时,我只能假设您指的是列表的外部显示。这可以使用join命令完成,如下所示:
% set x [list 1 2 3]
1 2 3
% set z "\{\"[join $x "\","]\"\}"
{ “1”,2" ,3" }