tcl/tk参考——列表操作lset

.

.

 

名称

lset - 修改列表中的一个元素

语法

lset varName ?index...? newValue

描述

lset命令接收一个varName参量,varName是一个列表变量。命令可以接收0个或多个index,多个index可 以连续排列,也可以以列表形式出现。最终接收一个新的值作为varName的一个元素。如果没有index,命令形式如下:

lset varName newValue

lset varName {} newValue

在这种情况下,newValue取代变量varName的值。

当只有一个索引,lset命令把varName当作一个列表处理,指出了第index个元素的位置(0指列表的第一 个元素)。当解释列表的时候,lset遵循Tcl命令解释器关于对花括号、引号和反斜杠的处理规则,但是 变量置换和命令置换并不会发生。命令构造一个使用newValue替换元素后的列表。这个新的列表存储在变 量varName中,lset命令也会返回这个新的列表。

如果index是负数或者大于或者等于$varName元素的数目,就发生一个错误。

每个单独的index数值和命令string index相同,支持一个index和多个index

如果有额外的index变元,每个变元指定了子列表中的元素,允许脚本去修改子列表里的元素。命令:

lset a 1 2 newValue

lset a {1 2} newValue

使用newValue替代第一个子列表中的第二个元素。

作为index变元必须是大于或者等于0的整数,而且必须小于相应的列表的长度,也就是说lset命令不能修改列表的大小,如果不符合上述要求则会报错。

示例

在以下的每个示例中,初始值x的值为:

set x [list [list a b c] [list d e f] [list g h i]]
      → {a b c} {d e f} {g h i}

命令返回结果并且会修改x的值,如果出错则不修改x的值。

lset x {j k l}
      → j k l
lset x {} {j k l}
      → j k l
lset x 0 j
      → j {d e f} {g h i}
lset x 2 j
      → {a b c} {d e f} j
lset x end j
      → {a b c} {d e f} j
lset x end-1 j
      → {a b c} j {g h i}
lset x 2 1 j
      → {a b c} {d e f} {g j i}
lset x {2 1} j
      → {a b c} {d e f} {g j i}
lset x {2 3} j
      → list index out of range

在以下的每个示例中,初始值x的值为:

set x [list [list [list a b] [list c d]] /
            [list [list e f] [list g h]]]
      → {{a b} {c d}} {{e f} {g h}}

命令返回结果并且会修改x的值,如果出错则不修改x的值。

lset x 1 1 0 j
      → {{a b} {c d}} {{e f} {j h}}
lset x {1 1 0} j
      → {{a b} {c d}} {{e f} {j h}}

你可能感兴趣的:(c,String,list,脚本,存储,Tcl)