如何用“,”而不是TCL列表中的空格来划分?

时间:2011-08-01 16:10:03

标签: list tcl

所以我有一个列表,在TCL中,项目存储为{“1”“2”“3”},空格分隔。我希望将此列表转换为{“1”,“2”,“3”} - 除了通过foreach和lappending,到每个项目的结尾之外,这将是一种有效的方法?

谢谢!

2 个答案:

答案 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" }