TCL - 使用 { }

问题描述 投票:0回答:1

我有一个 {a b} 形式的列表,我无法在大括号内插入任何内容

我尝试过这些:

set csv [list]

lappend csv [list \
    a       \
    b]
set csv [linsert $csv 1 x]

puts "$csv"  # OUTPUT {a b} x
    

################

set csv [list]

lappend csv [list \
    a       \
    b]

set csv [linsert $csv [llength $csv] x y]
    
    puts "$csv" # OUTPUT {a b} x y
    

################

set csv2 [list]

lappend csv2 [list \
    a       \
    b]

 lappend csv2 [list x y]

    puts "$csv2"   # OUTPUT {a b} {x y}
    
    

################

set csv2 [list]

lappend csv2 [list \
    a       \
    b]

 lappend csv2 y

    puts "$csv2"     #OUTPUT {a b} y

“lappend csv [list”部分自 2016 年以来就存在,我不想更改。我只需要在花括号内添加一些内容,这样所需的输出就是 {a b x y}

list insert tcl addition
1个回答
0
投票

命令

lappend csv [list a b]
将单个元素添加到列表中。由于您从一个空列表开始,因此您将拥有一个由单个元素组成的列表,而该元素又是一个列表。

现在您想要将更多元素插入到该子列表中,而不是插入到整个列表中。

linsert
lappend
命令仅适用于直接列表。他们无法自行进入子列表。因此,您必须提取子列表,修改它,然后将其放回去:

lset csv 0 [linsert [lindex $csv 0] 1 x y]

作为一种特殊情况,如果您只需要将单个元素附加到子列表的末尾,则可以利用

lset
的一些功能:
lset
命令可以进入子列表,并且如果满足以下条件,它将添加一个元素:索引超出列表的长度。所以你可以这样做:

lset csv 0 end+1 x

最终得到 {a b x}

© www.soinside.com 2019 - 2024. All rights reserved.